Don't KASSERT in pmap_release that

xpmap_ptom(VM_PAGE_TO_PHYS(m)) == (pmap->pm_pdpt[i] & PG_FRAME)
for i = NPGPTD, since pmap->pm_pdpt[i] is only initialized for
0 <= i < NPGPTD.

This fixes an inevitable panic with XEN && PAE && INVARIANTS when
pmap_release is called (e.g., when /sbin/init is launched).
This commit is contained in:
Colin Percival 2010-11-18 21:02:40 +00:00
parent 4166faaee0
commit f86f965ef8

View File

@ -1877,8 +1877,9 @@ pmap_release(pmap_t pmap)
/* unpinning L1 and L2 treated the same */
xen_pgd_unpin(ma);
#ifdef PAE
KASSERT(xpmap_ptom(VM_PAGE_TO_PHYS(m)) == (pmap->pm_pdpt[i] & PG_FRAME),
("pmap_release: got wrong ptd page"));
if (i < NPGPTD)
KASSERT(xpmap_ptom(VM_PAGE_TO_PHYS(m)) == (pmap->pm_pdpt[i] & PG_FRAME),
("pmap_release: got wrong ptd page"));
#endif
m->wire_count--;
atomic_subtract_int(&cnt.v_wire_count, 1);