From: Matthew Dillon Date: Fri, 5 Oct 2012 04:14:32 +0000 (-0700) Subject: kernel - Acquire vm_token in pmap_remove_all() X-Git-Tag: v3.2.0~26 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/bcc6a8acdb71c15106d6533a6567cb237d253ffb kernel - Acquire vm_token in pmap_remove_all() * Kitchen sink try to fix the wire_count panic, acquire vm_token in pmap_remove_all(). --- diff --git a/sys/platform/pc32/i386/pmap.c b/sys/platform/pc32/i386/pmap.c index d60cabd26a..9d6c89cc23 100644 --- a/sys/platform/pc32/i386/pmap.c +++ b/sys/platform/pc32/i386/pmap.c @@ -2053,7 +2053,10 @@ pmap_remove_all(vm_page_t m) if (!pmap_initialized || (m->flags & PG_FICTITIOUS)) return; + if (TAILQ_EMPTY(&m->md.pv_list)) + return; + lwkt_getoken(&vm_token); pmap_inval_init(&info); while ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) { pmap = pv->pv_pmap; @@ -2105,6 +2108,7 @@ pmap_remove_all(vm_page_t m) } KKASSERT((m->flags & (PG_MAPPED|PG_WRITEABLE)) == 0); pmap_inval_done(&info); + lwkt_reloken(&vm_token); } /*