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