From a15700fe32805ba16b50232a70037238a04fbb86 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 12 Jan 2003 23:32:46 +0000 Subject: Make vm_page_alloc() return PG_ZERO only if VM_ALLOC_ZERO is specified. The objective being to eliminate some cases of page queues locking. (See, for example, vm/vm_fault.c revision 1.160.) Reviewed by: tegge (Also, pointed out by tegge that I changed vm_fault.c before changing vm_page.c. Oops.) --- sys/vm/vm_page.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index a96b8ac93270..56abce4bc166 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -755,7 +755,7 @@ vm_page_alloc(vm_object_t object, vm_pindex_t pindex, int req) { vm_page_t m = NULL; vm_pindex_t color; - int page_req, s; + int flags, page_req, s; page_req = req & VM_ALLOC_CLASS_MASK; @@ -844,12 +844,13 @@ loop: /* * Initialize structure. Only the PG_ZERO flag is inherited. */ + flags = PG_BUSY; if (m->flags & PG_ZERO) { vm_page_zero_count--; - m->flags = PG_ZERO | PG_BUSY; - } else { - m->flags = PG_BUSY; + if (req & VM_ALLOC_ZERO) + flags = PG_ZERO | PG_BUSY; } + m->flags = flags; if (req & VM_ALLOC_WIRED) { atomic_add_int(&cnt.v_wire_count, 1); m->wire_count = 1; -- cgit v1.3