summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2006-07-02 18:22:47 +0000
committeralc <alc@FreeBSD.org>2006-07-02 18:22:47 +0000
commit4748a85152897a81bd4fa4b0c504e4dab6a67a52 (patch)
tree52334e0c050fe0dabea09c0d708efb99de22385b
parentd1b6a983460386cb68c8053c3f8a2d0423b6daac (diff)
downloadFreeBSD-src-4748a85152897a81bd4fa4b0c504e4dab6a67a52.zip
FreeBSD-src-4748a85152897a81bd4fa4b0c504e4dab6a67a52.tar.gz
Correct an error in the new pmap_collect(), thus only affecting HEAD.
Specifically, the pv entry was always being freed to the caller's pmap instead of the pmap to which the pv entry belongs.
-rw-r--r--sys/amd64/amd64/pmap.c2
-rw-r--r--sys/i386/i386/pmap.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index d95bbaa..aba07a2 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -1608,9 +1608,9 @@ pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
vm_page_flag_clear(m, PG_WRITEABLE);
m->md.pv_list_count--;
pmap_unuse_pt(pmap, va, ptepde);
+ free_pv_entry(pmap, pv);
if (pmap != locked_pmap)
PMAP_UNLOCK(pmap);
- free_pv_entry(locked_pmap, pv);
}
}
}
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 379a9fa..7bbab02 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1686,9 +1686,9 @@ pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
vm_page_flag_clear(m, PG_WRITEABLE);
m->md.pv_list_count--;
pmap_unuse_pt(pmap, va);
+ free_pv_entry(pmap, pv);
if (pmap != locked_pmap)
PMAP_UNLOCK(pmap);
- free_pv_entry(locked_pmap, pv);
}
}
sched_unpin();
OpenPOWER on IntegriCloud