Page MenuHomeFreeBSD

D20380.id57848.diff
No OneTemporary

D20380.id57848.diff

Index: head/sys/amd64/amd64/pmap.c
===================================================================
--- head/sys/amd64/amd64/pmap.c
+++ head/sys/amd64/amd64/pmap.c
@@ -4537,8 +4537,10 @@
" in pmap %p", va, pmap);
return (FALSE);
}
- if (va < VM_MAXUSER_ADDRESS)
+ if (va < VM_MAXUSER_ADDRESS) {
+ mpte->wire_count = NPTEPG;
pmap_resident_count_inc(pmap, 1);
+ }
}
mptepa = VM_PAGE_TO_PHYS(mpte);
firstpte = (pt_entry_t *)PHYS_TO_DMAP(mptepa);
@@ -4551,12 +4553,12 @@
newpte = pmap_swap_pat(pmap, newpte);
/*
- * If the page table page is new, initialize it.
+ * If the page table page is not leftover from an earlier promotion,
+ * initialize it.
*/
- if (mpte->wire_count == 1) {
- mpte->wire_count = NPTEPG;
+ if ((oldpde & PG_PROMOTED) == 0)
pmap_fill_ptp(firstpte, newpte);
- }
+
KASSERT((*firstpte & PG_FRAME) == (newpte & PG_FRAME),
("pmap_demote_pde: firstpte and newpte map different physical"
" addresses"));
Index: head/sys/i386/i386/pmap.c
===================================================================
--- head/sys/i386/i386/pmap.c
+++ head/sys/i386/i386/pmap.c
@@ -2768,8 +2768,10 @@
" in pmap %p", va, pmap);
return (FALSE);
}
- if (pmap != kernel_pmap)
+ if (pmap != kernel_pmap) {
+ mpte->wire_count = NPTEPG;
pmap->pm_stats.resident_count++;
+ }
}
mptepa = VM_PAGE_TO_PHYS(mpte);
@@ -2818,12 +2820,12 @@
newpte ^= PG_PDE_PAT | PG_PTE_PAT;
/*
- * If the page table page is new, initialize it.
+ * If the page table page is not leftover from an earlier promotion,
+ * initialize it.
*/
- if (mpte->wire_count == 1) {
- mpte->wire_count = NPTEPG;
+ if ((oldpde & PG_PROMOTED) == 0)
pmap_fill_ptp(firstpte, newpte);
- }
+
KASSERT((*firstpte & PG_FRAME) == (newpte & PG_FRAME),
("pmap_demote_pde: firstpte and newpte map different physical"
" addresses"));

File Metadata

Mime Type
text/plain
Expires
Wed, Jan 22, 7:50 PM (6 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16027680
Default Alt Text
D20380.id57848.diff (1 KB)

Event Timeline