diff options
-rw-r--r-- | sys/vm/vm_page.c | 5 | ||||
-rw-r--r-- | sys/vm/vm_page.h | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index d555309..a1f199c 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -843,7 +843,7 @@ loop: if (req & VM_ALLOC_ZERO) flags = PG_ZERO | PG_BUSY; } - if (req & VM_ALLOC_NOOBJ) + if (req & (VM_ALLOC_NOBUSY | VM_ALLOC_NOOBJ)) flags &= ~PG_BUSY; m->flags = flags; if (req & VM_ALLOC_WIRED) { @@ -1420,7 +1420,8 @@ retrylookup: } else { if (allocflags & VM_ALLOC_WIRED) vm_page_wire(m); - vm_page_busy(m); + if ((allocflags & VM_ALLOC_NOBUSY) == 0) + vm_page_busy(m); vm_page_unlock_queues(); return (m); } diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index a7f84e8..9c9cfba 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -317,6 +317,7 @@ extern struct mtx vm_page_queue_mtx; #define VM_ALLOC_ZERO 0x0040 /* Try to obtain a zeroed page */ #define VM_ALLOC_RETRY 0x0080 /* vm_page_grab() only */ #define VM_ALLOC_NOOBJ 0x0100 /* No associated object */ +#define VM_ALLOC_NOBUSY 0x0200 /* Do not busy the page */ void vm_page_flag_set(vm_page_t m, unsigned short bits); void vm_page_flag_clear(vm_page_t m, unsigned short bits); |