AMD64 - Fix bug in pmap_release_free_page()
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 8 Jul 2009 03:13:31 +0000 (20:13 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 8 Jul 2009 03:13:31 +0000 (20:13 -0700)
The pmap_release_free_page() function was improperly conditionalizing
a test for (pindex == NUPDE + NUPDPE + PML4PML4I) which caused it to
fall through to an else clause, instead of doing nothing.  Make it
do nothing.

This fixes a hold count panic.

sys/platform/pc64/amd64/pmap.c

index 2a23d9a..5324b9a 100644 (file)
@@ -1588,7 +1588,12 @@ READY1
        /*
         * Remove the page table page from the processes address space.
         */
-       if (p->pindex >= (NUPDE + NUPDPE) && p->pindex != (NUPDE + NUPDPE + PML4PML4I)) {
+       if (p->pindex == NUPDE + NUPDPE + PML4PML4I) {
+               /*
+                * We are the pml4 table itself.
+                */
+               /* XXX anything to do here? */
+       } else if (p->pindex >= (NUPDE + NUPDPE)) {
                /*
                 * We are a PDP page.
                 * We look for the PML4 entry that points to us.