summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-07-10 09:24:03 +0000
committerkib <kib@FreeBSD.org>2013-07-10 09:24:03 +0000
commit336012d28ce09b00977ed864f9c6e424ea866886 (patch)
tree47b2c34175df8e9b92da8e1e8797bf1bcd2f1c4f
parentbef0b386920c0c9dec8c841dcb3324e62159114d (diff)
downloadFreeBSD-src-336012d28ce09b00977ed864f9c6e424ea866886.zip
FreeBSD-src-336012d28ce09b00977ed864f9c6e424ea866886.tar.gz
Clear m->object for the page taken from the delayed free list for
reuse as the pv chink page in reclaim_pv_chunk(). Having non-NULL m->object is wrong for page not owned by an object and confuses both vm_page_free_toq() and vm_page_remove() when the page is freed later. Reported and tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 3 days
-rw-r--r--sys/amd64/amd64/pmap.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index e1d373c..19be4e0 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -2234,6 +2234,7 @@ reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp)
if (m_pc == NULL && free != NULL) {
m_pc = free;
free = (void *)m_pc->object;
+ m_pc->object = NULL;
/* Recycle a freed page table page. */
m_pc->wire_count = 1;
atomic_add_int(&cnt.v_wire_count, 1);
OpenPOWER on IntegriCloud