From eed6f3fd45310e10d5307784acd9c1b59eebe772 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 13 Jul 2002 23:55:30 +0000 Subject: o Lock page queue accesses by vm_page_unmanage(). o Assert that the page queues lock is held in vm_page_unmanage(). --- sys/vm/phys_pager.c | 2 ++ sys/vm/vm_page.c | 1 + 2 files changed, 3 insertions(+) (limited to 'sys') diff --git a/sys/vm/phys_pager.c b/sys/vm/phys_pager.c index a93dda1c0fd8..98c505c1cb09 100644 --- a/sys/vm/phys_pager.c +++ b/sys/vm/phys_pager.c @@ -147,7 +147,9 @@ phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage) vm_page_zero_fill(m[i]); vm_page_flag_set(m[i], PG_ZERO); /* Switch off pv_entries */ + vm_page_lock_queues(); vm_page_unmanage(m[i]); + vm_page_unlock_queues(); m[i]->valid = VM_PAGE_BITS_ALL; m[i]->dirty = 0; /* The requested page must remain busy, the others not. */ diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 74eb575cfdd5..6e08ec11c7b1 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -1211,6 +1211,7 @@ vm_page_unmanage(vm_page_t m) int s; s = splvm(); + mtx_assert(&vm_page_queue_mtx, MA_OWNED); if ((m->flags & PG_UNMANAGED) == 0) { if (m->wire_count == 0) vm_pageq_remove(m); -- cgit v1.3