summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-12-31 19:50:45 +0000
committeralc <alc@FreeBSD.org>2004-12-31 19:50:45 +0000
commitdb7aa8b882d94f106426b1879063c9abffa583f4 (patch)
tree16fa4d02c3c862ac588053f40880d1c6a5690a11 /sys/vm
parent65cf57f523204a7d6cd5d3c0982549ff4e7a3c01 (diff)
downloadFreeBSD-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/vm')
-rw-r--r--sys/vm/vm_page.c8
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,
OpenPOWER on IntegriCloud