Page MenuHomeFreeBSD

D16085.id44899.diff
No OneTemporary

D16085.id44899.diff

Index: sys/amd64/amd64/pmap.c
===================================================================
--- sys/amd64/amd64/pmap.c
+++ sys/amd64/amd64/pmap.c
@@ -2307,9 +2307,7 @@
if (vm_page_pa_tryrelock(pmap, (pde &
PG_PS_FRAME) | (va & PDRMASK), &pa))
goto retry;
- m = PHYS_TO_VM_PAGE((pde & PG_PS_FRAME) |
- (va & PDRMASK));
- vm_page_hold(m);
+ m = PHYS_TO_VM_PAGE(pa);
}
} else {
pte = *pmap_pde_to_pte(pdep, va);
@@ -2318,11 +2316,11 @@
if (vm_page_pa_tryrelock(pmap, pte & PG_FRAME,
&pa))
goto retry;
- m = PHYS_TO_VM_PAGE(pte & PG_FRAME);
- if (m != NULL)
- vm_page_hold(m);
+ m = PHYS_TO_VM_PAGE(pa);
}
}
+ if (m != NULL)
+ vm_page_hold(m);
}
PA_UNLOCK_COND(pa);
PMAP_UNLOCK(pmap);
Index: sys/i386/i386/pmap.c
===================================================================
--- sys/i386/i386/pmap.c
+++ sys/i386/i386/pmap.c
@@ -1672,9 +1672,7 @@
if (vm_page_pa_tryrelock(pmap, (pde &
PG_PS_FRAME) | (va & PDRMASK), &pa))
goto retry;
- m = PHYS_TO_VM_PAGE((pde & PG_PS_FRAME) |
- (va & PDRMASK));
- vm_page_hold(m);
+ m = PHYS_TO_VM_PAGE(pa);
}
} else {
pte = pmap_pte_ufast(pmap, va, pde);
@@ -1683,11 +1681,11 @@
if (vm_page_pa_tryrelock(pmap, pte & PG_FRAME,
&pa))
goto retry;
- m = PHYS_TO_VM_PAGE(pte & PG_FRAME);
- if (m != NULL)
- vm_page_hold(m);
+ m = PHYS_TO_VM_PAGE(pa);
}
}
+ if (m != NULL)
+ vm_page_hold(m);
}
PA_UNLOCK_COND(pa);
PMAP_UNLOCK(pmap);
Index: sys/vm/vm_page.c
===================================================================
--- sys/vm/vm_page.c
+++ sys/vm/vm_page.c
@@ -551,6 +551,9 @@
vm_paddr_t biggestsize, last_pa, pa;
u_long pagecount;
int biggestone, i, segind;
+#if defined(__i386__) && defined(VM_PHYSSEG_DENSE)
+ long ii;
+#endif
biggestsize = 0;
biggestone = 0;
@@ -789,6 +792,13 @@
* Initialize the page structures and add every available page to the
* physical memory allocator's free lists.
*/
+#if defined(__i386__) && defined(VM_PHYSSEG_DENSE)
+ for (ii = 0; ii < vm_page_array_size; ii++) {
+ m = &vm_page_array[ii];
+ vm_page_init_page(m, (first_page + ii) << PAGE_SHIFT, 0);
+ m->flags = PG_FICTITIOUS;
+ }
+#endif
vm_cnt.v_page_count = 0;
for (segind = 0; segind < vm_phys_nsegs; segind++) {
seg = &vm_phys_segs[segind];

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 3:37 PM (9 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28595139
Default Alt Text
D16085.id44899.diff (2 KB)

Event Timeline