PERFORCE change 31667 for review
Peter Wemm
peter at FreeBSD.org
Thu May 22 19:55:30 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=31667
Change 31667 by peter at peter_hammer on 2003/05/22 19:54:53
Finish off pmap_prefault(), and implicitly pmap_enter_quick(). I have
to wonder if it might not be easier to just use pmap_enter() for this stuff
and speed up pmap_enter() a bit.
Affected files ...
.. //depot/projects/hammer/sys/amd64/amd64/pmap.c#9 edit
Differences ...
==== //depot/projects/hammer/sys/amd64/amd64/pmap.c#9 (text+ko) ====
@@ -206,10 +206,8 @@
static void amd64_protection_init(void);
static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem);
-#if 0
static vm_page_t pmap_enter_quick(pmap_t pmap, vm_offset_t va,
vm_page_t m, vm_page_t mpte);
-#endif
static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva);
static void pmap_remove_page(struct pmap *pmap, vm_offset_t va);
static int pmap_remove_entry(struct pmap *pmap, vm_page_t m,
@@ -2137,7 +2135,6 @@
* but is *MUCH* faster than pmap_enter...
*/
-#if 0
static vm_page_t
pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte)
{
@@ -2150,7 +2147,7 @@
*/
if (va < VM_MAXUSER_ADDRESS) {
unsigned ptepindex;
- pd_entry_t ptepa;
+ pd_entry_t *ptepa;
/*
* Calculate pagetable page index
@@ -2163,14 +2160,14 @@
/*
* Get the page directory entry
*/
- ptepa = pmap->pm_pdir[ptepindex];
+ ptepa = pmap_pde(pmap, va);
/*
* If the page table page is mapped, we just increment
* the hold count, and activate it.
*/
- if (ptepa) {
- if (ptepa & PG_PS)
+ if (ptepa && (*ptepa & PG_V) != 0) {
+ if (*ptepa & PG_PS)
panic("pmap_enter_quick: unexpected mapping into 2MB page");
if (pmap->pm_pteobj->root &&
(pmap->pm_pteobj->root->pindex == ptepindex)) {
@@ -2230,7 +2227,6 @@
return mpte;
}
-#endif
/*
* Make a temporary mapping for a physical address. This is only intended
@@ -2395,14 +2391,12 @@
#define PFFOR 4
#define PAGEORDER_SIZE (PFBAK+PFFOR)
-#if 0
static int pmap_prefault_pageorder[] = {
-1 * PAGE_SIZE, 1 * PAGE_SIZE,
-2 * PAGE_SIZE, 2 * PAGE_SIZE,
-3 * PAGE_SIZE, 3 * PAGE_SIZE,
-4 * PAGE_SIZE, 4 * PAGE_SIZE
};
-#endif
void
pmap_prefault(pmap, addra, entry)
@@ -2410,13 +2404,13 @@
vm_offset_t addra;
vm_map_entry_t entry;
{
-#if 0
int i;
vm_offset_t starta;
vm_offset_t addr;
vm_pindex_t pindex;
vm_page_t m, mpte;
vm_object_t object;
+ pd_entry_t *pde;
if (!curthread || (pmap != vmspace_pmap(curthread->td_proc->p_vmspace)))
return;
@@ -2442,11 +2436,12 @@
if (addr < starta || addr >= entry->end)
continue;
- if ((*pmap_pde(pmap, addr)) == 0)
+ pde = pmap_pde(pmap, addr);
+ if (pde == NULL || (*pde & PG_V) == 0)
continue;
pte = vtopte(addr);
- if (*pte)
+ if ((*pte & PG_V) == 0)
continue;
pindex = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT;
@@ -2481,7 +2476,6 @@
}
vm_page_unlock_queues();
}
-#endif
}
/*
More information about the p4-projects
mailing list