PERFORCE change 133967 for review

Kip Macy kmacy at FreeBSD.org
Wed Jan 23 18:20:13 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=133967

Change 133967 by kmacy at pandemonium:kmacy:xen31 on 2008/01/24 02:19:51

	don't build pmap.c with nowerror
	cleanup pmap_release
	don't reference pdptzone on xen builds

Affected files ...

.. //depot/projects/xen31/sys/conf/files.i386#13 edit
.. //depot/projects/xen31/sys/i386/xen/pmap.c#31 edit

Differences ...

==== //depot/projects/xen31/sys/conf/files.i386#13 (text+ko) ====

@@ -317,7 +317,7 @@
 i386/i386/nexus.c		standard
 i386/i386/perfmon.c		optional perfmon
 i386/i386/pmap.c		optional native
-i386/xen/pmap.c			optional xen nowerror
+i386/xen/pmap.c			optional xen 
 i386/i386/ptrace_machdep.c	standard
 i386/i386/stack_machdep.c	optional ddb | stack
 i386/i386/support.s		standard

==== //depot/projects/xen31/sys/i386/xen/pmap.c#31 (text+ko) ====

@@ -213,8 +213,10 @@
 
 #ifdef PAE
 pt_entry_t pg_nx;
+#if !defined(XEN) 
 static uma_zone_t pdptzone;
 #endif
+#endif
 
 /*
  * Data for the pv entry allocation mechanism
@@ -292,7 +294,7 @@
 static vm_offset_t pmap_kmem_choose(vm_offset_t addr);
 static boolean_t pmap_is_prefaultable_locked(pmap_t pmap, vm_offset_t addr);
 
-#ifdef PAE
+#if defined(PAE) && !defined(XEN)
 static void *pmap_pdpt_allocf(uma_zone_t zone, int bytes, u_int8_t *flags, int wait);
 #endif
 
@@ -585,7 +587,7 @@
 	TAILQ_INIT(&m->md.pv_list);
 }
 
-#ifdef PAE
+#if defined(PAE) && !defined(XEN)
 
 static MALLOC_DEFINE(M_PMAPPDPT, "pmap", "pmap pdpt");
 
@@ -679,7 +681,7 @@
 	if (pv_chunkbase == NULL)
 		panic("pmap_init: not enough kvm for pv chunks");
 	pmap_ptelist_init(&pv_vafree, pv_chunkbase, pv_maxchunks);
-#ifdef PAE
+#if defined(PAE) && !defined(XEN)
 	pdptzone = uma_zcreate("PDPT", NPGPTD * sizeof(pdpt_entry_t), NULL,
 	    NULL, NULL, NULL, (NPGPTD * sizeof(pdpt_entry_t)) - 1,
 	    UMA_ZONE_VM | UMA_ZONE_NOFREE);
@@ -1250,6 +1252,10 @@
 	}
 	if (mclcount) 
 		HYPERVISOR_multicall(mcl, mclcount);
+#ifdef INVARIANTS
+	for (pte = vtopte(sva), mclcount = 0; mclcount < count; mclcount++, pte++)
+		KASSERT(*pte, ("pte not set for va=0x%x\n", sva + mclcount*PAGE_SIZE));
+#endif	
 }
 
 
@@ -1710,37 +1716,40 @@
 void
 pmap_release(pmap_t pmap)
 {
-	vm_page_t m, ptdpg[NPGPTD+1];
+	vm_page_t m, ptdpg[2*NPGPTD+1];
 	vm_paddr_t ma;
 	int i;
+#ifdef XEN
 #ifdef PAE	
 	int npgptd = 2*NPGPTD + 1;
 #else
 	int npgptd = 2*NPGPTD;
 #endif
-
+#else 
+	int npgptd = NPGPTD;
+#endif	
 	KASSERT(pmap->pm_stats.resident_count == 0,
 	    ("pmap_release: pmap resident count %ld != 0",
 	    pmap->pm_stats.resident_count));
+	PT_UPDATES_FLUSH();
 
 	pmap_lazyfix(pmap);
 	mtx_lock_spin(&allpmaps_lock);
 	LIST_REMOVE(pmap, pm_list);
 	mtx_unlock_spin(&allpmaps_lock);
 
+#ifdef XEN	
 	for (i = 0; i < NPGPTD; i++)
 		ptdpg[i] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdir_shadow + (i*NPDEPG)) & PG_FRAME);
+	pmap_qremove((vm_offset_t)pmap->pm_pdir_shadow, NPGPTD);	
+#endif
 	for (i = 0; i < NPGPTD; i++)
 		ptdpg[NPGPTD + i] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdir + (i*NPDEPG)) & PG_FRAME);
-
-#ifdef PAE
+	pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD);
+#if defined(PAE) && defined(XEN)
 	ptdpg[2*NPGPTD] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdpt));
 #endif	
 
-	PT_UPDATES_FLUSH();
-	pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD);
-	pmap_qremove((vm_offset_t)pmap->pm_pdir_shadow, NPGPTD);	
-
 	for (i = 0; i < npgptd; i++) {
 		m = ptdpg[i];
 		ma = xpmap_ptom(VM_PAGE_TO_PHYS(m));
@@ -2713,6 +2722,7 @@
 		*PMAP1 = 0;
 	sched_unpin();
 	vm_page_unlock_queues();
+	KASSERT(*vtopte(va), ("pte not set for va=0x%x\n", va));
 	PMAP_UNLOCK(pmap);
 }
 


More information about the p4-projects mailing list