diff options
author | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
---|---|---|
committer | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
commit | 5e0e9b99dc3fc0ecd49d929db0d57c784b66f481 (patch) | |
tree | e779b5a6edddbb949b7990751b12d6f25304ba86 /sys/vm/vm_object.c | |
parent | a16f65c7d117419bd266c28a1901ef129a337569 (diff) |
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 5c463f64d6c5..3dea7601b5ba 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)vm_object.c 7.4 (Berkeley) 5/7/91 - * $Id: vm_object.c,v 1.21.2.1 1994/03/07 02:22:13 rgrimes Exp $ + * $Id: vm_object.c,v 1.25 1994/04/14 07:50:21 davidg Exp $ * * * Copyright (c) 1987, 1990 Carnegie-Mellon University. @@ -401,7 +401,7 @@ vm_object_terminate(object) VM_PAGE_CHECK(p); vm_page_lock_queues(); - s = vm_disable_intr(); + s = splimp(); if (p->flags & PG_ACTIVE) { queue_remove(&vm_page_queue_active, p, vm_page_t, pageq); @@ -415,7 +415,7 @@ vm_object_terminate(object) p->flags &= ~PG_INACTIVE; vm_page_inactive_count--; } - vm_set_intr(s); + splx(s); vm_page_unlock_queues(); p = (vm_page_t) queue_next(&p->listq); } @@ -514,15 +514,7 @@ again: vm_page_deactivate(p); if ((p->flags & PG_CLEAN) == 0) { - p->flags |= PG_BUSY; - object->paging_in_progress++; - vm_object_unlock(object); - (void) vm_pager_put(object->pager, p, TRUE); - vm_object_lock(object); - object->paging_in_progress--; - if (object->paging_in_progress == 0) - wakeup((caddr_t) object); - PAGE_WAKEUP(p); + vm_pageout_clean(p,1); goto again; } } @@ -551,7 +543,7 @@ vm_object_deactivate_pages(object) next = (vm_page_t) queue_next(&p->listq); vm_page_lock_queues(); if ((p->flags & (PG_INACTIVE|PG_BUSY)) == 0 && - p->wire_count == 0) + (p->wire_count == 0 && p->hold_count == 0)) vm_page_deactivate(p); /* optimisation from mach 3.0 - * andrew@werple.apana.org.au, * Feb '93 @@ -658,14 +650,14 @@ vm_object_pmap_copy(object, start, end) register vm_page_t p; vm_offset_t amount; + if (object == NULL) + return; + start = trunc_page(start); end = round_page(end); amount = ((end - start) + PAGE_SIZE - 1) / PAGE_SIZE; - if (object == NULL) - return; - vm_object_lock(object); p = (vm_page_t) queue_first(&object->memq); while (!queue_end(&object->memq, (queue_entry_t) p)) { |