diff options
author | alc <alc@FreeBSD.org> | 2004-12-31 19:50:45 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-12-31 19:50:45 +0000 |
commit | db7aa8b882d94f106426b1879063c9abffa583f4 (patch) | |
tree | 16fa4d02c3c862ac588053f40880d1c6a5690a11 /sys | |
parent | 65cf57f523204a7d6cd5d3c0982549ff4e7a3c01 (diff) | |
download | FreeBSD-src-db7aa8b882d94f106426b1879063c9abffa583f4.zip FreeBSD-src-db7aa8b882d94f106426b1879063c9abffa583f4.tar.gz |
Assert that page allocations during an interrupt specify
VM_ALLOC_INTERRUPT.
Assert that pages removed from the cache queue are not busy.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/vm/vm_page.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 5a0b7ac..5ef46cc 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -706,9 +706,10 @@ vm_page_select_cache(int color) mtx_assert(&vm_page_queue_mtx, MA_OWNED); while ((m = vm_pageq_find(PQ_CACHE, color, FALSE)) != NULL) { - if ((m->flags & PG_BUSY) == 0 && m->busy == 0 && - m->hold_count == 0 && (VM_OBJECT_TRYLOCK(m->object) || + if (m->hold_count == 0 && (VM_OBJECT_TRYLOCK(m->object) || VM_OBJECT_LOCKED(m->object))) { + KASSERT((m->flags & PG_BUSY) == 0 && m->busy == 0, + ("Found busy cache page %p", m)); KASSERT(m->dirty == 0, ("Found dirty cache page %p", m)); KASSERT(!pmap_page_is_mapped(m), @@ -750,6 +751,9 @@ vm_page_alloc(vm_object_t object, vm_pindex_t pindex, int req) int color, flags, page_req; page_req = req & VM_ALLOC_CLASS_MASK; + KASSERT(curthread->td_intr_nesting_level == 0 || + page_req == VM_ALLOC_INTERRUPT, + ("vm_page_alloc(NORMAL|SYSTEM) in interrupt context")); if ((req & VM_ALLOC_NOOBJ) == 0) { KASSERT(object != NULL, |