PERFORCE change 133448 for review
Kip Macy
kmacy at FreeBSD.org
Wed Jan 16 17:19:54 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=133448
Change 133448 by kmacy at pandemonium:kmacy:xen31 on 2008/01/17 01:19:23
add copious asserts to check for invariants in pmap utility functions
Affected files ...
.. //depot/projects/xen31/sys/i386/xen/pmap.c#15 edit
Differences ...
==== //depot/projects/xen31/sys/i386/xen/pmap.c#15 (text+ko) ====
@@ -2805,7 +2805,7 @@
* But that isn't as quick as vtopte.
*/
pte = vtopte(va);
- if (*pte) {
+ if (*pte & PG_V) {
if (mpte != NULL) {
mpte->wire_count--;
mpte = NULL;
@@ -3123,6 +3123,9 @@
#else
*sysmaps->CMAP2 = PG_V | PG_RW | VM_PAGE_TO_PHYS(m) | PG_A | PG_M;
#endif
+ KASSERT(*sysmaps->CMAP2 == (PG_V | PG_RW | xpmap_ptom(VM_PAGE_TO_PHYS(m)) | PG_A | PG_M),
+ ("CMAP2 did not get set is %llx", *sysmaps->CMAP2));
+
invlcaddr(sysmaps->CADDR2);
pagezero(sysmaps->CADDR2);
PT_CLEAR_VA(sysmaps->CMAP2, TRUE);
@@ -3193,17 +3196,25 @@
sysmaps = &sysmaps_pcpu[PCPU_GET(cpuid)];
mtx_lock(&sysmaps->lock);
if (*sysmaps->CMAP1)
- panic("pmap_copy_page: CMAP1 busy");
+ panic("pmap_copy_page: CMAP1 busy, CMAP1=%llx", *sysmaps->CMAP1);
if (*sysmaps->CMAP2)
panic("pmap_copy_page: CMAP2 busy");
sched_pin();
invlpg((u_int)sysmaps->CADDR1);
invlpg((u_int)sysmaps->CADDR2);
- PT_SET_VA(sysmaps->CMAP1, PG_V | VM_PAGE_TO_PHYS(src) | PG_A, FALSE);
+ PT_SET_VA(sysmaps->CMAP1, PG_V | VM_PAGE_TO_PHYS(src) | PG_A, TRUE);
PT_SET_VA(sysmaps->CMAP2, PG_V | PG_RW | VM_PAGE_TO_PHYS(dst) | PG_A | PG_M, TRUE);
+ KASSERT(*sysmaps->CMAP1 == (PG_V | xpmap_ptom(VM_PAGE_TO_PHYS(src)) | PG_A ),
+ ("CMAP1 did not get set is %llx", *sysmaps->CMAP1));
+ KASSERT(*sysmaps->CMAP2 == (PG_V | PG_RW | xpmap_ptom(VM_PAGE_TO_PHYS(dst)) | PG_A | PG_M),
+ ("CMAP2 did not get set is %llx", *sysmaps->CMAP2));
bcopy(sysmaps->CADDR1, sysmaps->CADDR2, PAGE_SIZE);
PT_CLEAR_VA(sysmaps->CMAP1, FALSE);
PT_CLEAR_VA(sysmaps->CMAP2, TRUE);
+ if (*sysmaps->CMAP1)
+ panic("pmap_copy_page: CMAP1 busy, CMAP1=%llx", *sysmaps->CMAP1);
+ if (*sysmaps->CMAP2)
+ panic("pmap_copy_page: CMAP2 busy");
sched_unpin();
mtx_unlock(&sysmaps->lock);
}
@@ -3317,9 +3328,8 @@
printf(
"TPTE at %p IS ZERO @ VA %08x\n",
pte, pv->pv_va);
- panic("bad pte");
+ panic("bad pte tpte");
}
-
/*
* We cannot remove wired pages from a process' mapping at this time
*/
More information about the p4-projects
mailing list