PERFORCE change 132286 for review
Kip Macy
kmacy at FreeBSD.org
Tue Jan 1 20:22:46 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=132286
Change 132286 by kmacy at pandemonium:kmacy:xen31 on 2008/01/02 04:22:34
make sure that page tables and pv entry pages are zeroed
Affected files ...
.. //depot/projects/xen31/sys/i386/xen/pmap.c#10 edit
Differences ...
==== //depot/projects/xen31/sys/i386/xen/pmap.c#10 (text+ko) ====
@@ -1287,8 +1287,12 @@
/*
* unmap the page table page
*/
- xen_pt_unpin(pmap->pm_pdir[m->pindex]);
+ xen_pt_unpin(pmap->pm_pdir[m->pindex]);
+ /*
+ * page *might* contain residual mapping :-/
+ */
PD_CLEAR_VA(pmap, m->pindex, TRUE);
+ pmap_zero_page(m);
--pmap->pm_stats.resident_count;
/*
@@ -1427,6 +1431,8 @@
#ifdef PAE
#ifdef XEN
pmap_qenter((vm_offset_t)pmap->pm_pdpt, &ptdpg[NPGPTD*2], 1);
+ if ((ptdpg[NPGPTD*2]->flags & PG_ZERO) == 0)
+ bzero(pmap->pm_pdpt, PAGE_SIZE);
#endif
for (i = 0; i < NPGPTD; i++) {
vm_paddr_t ma;
@@ -2057,6 +2063,8 @@
colour++;
pc = (struct pv_chunk *)pmap_ptelist_alloc(&pv_vafree);
pmap_qenter((vm_offset_t)pc, &m, 1);
+ if ((m->flags & PG_ZERO) == 0)
+ bzero(pc, PG_ZERO);
pc->pc_pmap = pmap;
pc->pc_map[0] = pc_freemask[0] & ~1ul; /* preallocated bit 0 */
for (field = 1; field < _NPCM; field++)
@@ -3300,6 +3308,11 @@
pv = &pc->pc_pventry[idx];
inuse &= ~bitmask;
+ if (pmap->pm_pdir_shadow[pv->pv_va >> PDRSHIFT] == 0) {
+ printf("PDIR IS ZERO @ VA %08x\n", pv->pv_va);
+ panic("bad pte");
+ }
+
pte = vtopte(pv->pv_va);
tpte = PT_GET(pte);
More information about the p4-projects
mailing list