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