diff options
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r-- | sys/vm/vm_page.c | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 4a95e6e..79dd930 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91 - * $Id: vm_page.c,v 1.59 1996/06/21 05:39:22 dyson Exp $ + * $Id: vm_page.c,v 1.60 1996/06/26 05:39:25 dyson Exp $ */ /* @@ -385,7 +385,7 @@ vm_page_hash(object, pindex) * The object and page must be locked, and must be splhigh. */ -__inline void +void vm_page_insert(m, object, pindex) register vm_page_t m; register vm_object_t object; @@ -434,7 +434,7 @@ vm_page_insert(m, object, pindex) * The object and page must be locked, and at splhigh. */ -__inline void +void vm_page_remove(m) register vm_page_t m; { @@ -523,34 +523,19 @@ vm_page_rename(m, new_object, new_pindex) } /* - * vm_page_unqueue without any wakeup - */ -__inline void -vm_page_unqueue_nowakeup(m) - vm_page_t m; -{ - int queue = m->queue; - if (queue != PQ_NONE) { - m->queue = PQ_NONE; - TAILQ_REMOVE(vm_page_queues[queue].pl, m, pageq); - --(*vm_page_queues[queue].cnt); - } -} - - -/* * vm_page_unqueue must be called at splhigh(); */ __inline void -vm_page_unqueue(m) +vm_page_unqueue(m, wakeup) vm_page_t m; + int wakeup; { int queue = m->queue; if (queue != PQ_NONE) { m->queue = PQ_NONE; TAILQ_REMOVE(vm_page_queues[queue].pl, m, pageq); --(*vm_page_queues[queue].cnt); - if (queue == PQ_CACHE) { + if ((queue == PQ_CACHE) && wakeup) { if ((cnt.v_cache_count + cnt.v_free_count) < (cnt.v_free_reserved + cnt.v_cache_min)) pagedaemon_wakeup(); @@ -736,7 +721,7 @@ vm_page_activate(m) if (m->queue == PQ_CACHE) cnt.v_reactivated++; - vm_page_unqueue(m); + vm_page_unqueue(m, 1); if (m->wire_count == 0) { TAILQ_INSERT_TAIL(&vm_page_queue_active, m, pageq); @@ -751,7 +736,7 @@ vm_page_activate(m) /* * helper routine for vm_page_free and vm_page_free_zero */ -static int +__inline static int vm_page_freechk_and_unqueue(m) vm_page_t m; { @@ -769,7 +754,7 @@ vm_page_freechk_and_unqueue(m) } vm_page_remove(m); - vm_page_unqueue_nowakeup(m); + vm_page_unqueue(m,0); if ((m->flags & PG_FICTITIOUS) != 0) { return 0; } @@ -788,7 +773,7 @@ vm_page_freechk_and_unqueue(m) /* * helper routine for vm_page_free and vm_page_free_zero */ -static __inline void +__inline static void vm_page_free_wakeup() { @@ -895,7 +880,7 @@ vm_page_wire(m) if (m->wire_count == 0) { s = splvm(); - vm_page_unqueue(m); + vm_page_unqueue(m,1); splx(s); cnt.v_wire_count++; } @@ -961,7 +946,7 @@ vm_page_deactivate(m) if (m->wire_count == 0 && m->hold_count == 0) { if (m->queue == PQ_CACHE) cnt.v_reactivated++; - vm_page_unqueue(m); + vm_page_unqueue(m,1); TAILQ_INSERT_TAIL(&vm_page_queue_inactive, m, pageq); m->queue = PQ_INACTIVE; cnt.v_inactive_count++; @@ -992,7 +977,7 @@ vm_page_cache(m) panic("vm_page_cache: caching a dirty page, pindex: %d", m->pindex); } s = splvm(); - vm_page_unqueue_nowakeup(m); + vm_page_unqueue(m,0); TAILQ_INSERT_TAIL(&vm_page_queue_cache, m, pageq); m->queue = PQ_CACHE; cnt.v_cache_count++; @@ -1031,7 +1016,7 @@ vm_page_set_validclean(m, base, size) m->valid |= pagebits; m->dirty &= ~pagebits; if( base == 0 && size == PAGE_SIZE) - pmap_clear_modify(VM_PAGE_TO_PHYS(m)); + pmap_tc_modified(m); } /* @@ -1071,10 +1056,8 @@ void vm_page_test_dirty(m) vm_page_t m; { - if ((m->dirty != VM_PAGE_BITS_ALL) && - pmap_is_modified(VM_PAGE_TO_PHYS(m))) { - m->dirty = VM_PAGE_BITS_ALL; - } + if (m->dirty != VM_PAGE_BITS_ALL) + pmap_tc_modified(m); } /* |