Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Nov 2010 21:02:40 +0000 (UTC)
From:      Colin Percival <cperciva@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r215470 - head/sys/i386/xen
Message-ID:  <201011182102.oAIL2enA044887@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cperciva
Date: Thu Nov 18 21:02:40 2010
New Revision: 215470
URL: http://svn.freebsd.org/changeset/base/215470

Log:
  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).

Modified:
  head/sys/i386/xen/pmap.c

Modified: head/sys/i386/xen/pmap.c
==============================================================================
--- head/sys/i386/xen/pmap.c	Thu Nov 18 20:46:28 2010	(r215469)
+++ head/sys/i386/xen/pmap.c	Thu Nov 18 21:02:40 2010	(r215470)
@@ -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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011182102.oAIL2enA044887>