diff options
author | kib <kib@FreeBSD.org> | 2013-07-10 09:24:03 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2013-07-10 09:24:03 +0000 |
commit | 336012d28ce09b00977ed864f9c6e424ea866886 (patch) | |
tree | 47b2c34175df8e9b92da8e1e8797bf1bcd2f1c4f /sys/amd64 | |
parent | bef0b386920c0c9dec8c841dcb3324e62159114d (diff) | |
download | FreeBSD-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
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/pmap.c | 1 |
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); |