diff options
author | dyson <dyson@FreeBSD.org> | 1996-07-30 03:08:57 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1996-07-30 03:08:57 +0000 |
commit | 01ce9d323a15a1365c3b7802f404edd77da1e38b (patch) | |
tree | ac8503dbf428f1dae7c0a8bba152c865f89a493a /sys/vm/vm_page.c | |
parent | ff1df96f3bbd049cd4de0c3d6652ac34449f19b9 (diff) | |
download | FreeBSD-src-01ce9d323a15a1365c3b7802f404edd77da1e38b.zip FreeBSD-src-01ce9d323a15a1365c3b7802f404edd77da1e38b.tar.gz |
Backed out the recent changes/enhancements to the VM code. The
problem with the 'shell scripts' was found, but there was a 'strange'
problem found with a 486 laptop that we could not find. This commit
backs the code back to 25-jul, and will be re-entered after the snapshot
in smaller (more easily tested) chunks.
Diffstat (limited to 'sys/vm/vm_page.c')
-rw-r--r-- | sys/vm/vm_page.c | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 79dd930..4857d45 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.60 1996/06/26 05:39:25 dyson Exp $ + * $Id: vm_page.c,v 1.61 1996/07/27 03:24:05 dyson Exp $ */ /* @@ -385,7 +385,7 @@ vm_page_hash(object, pindex) * The object and page must be locked, and must be splhigh. */ -void +__inline 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. */ -void +__inline void vm_page_remove(m) register vm_page_t m; { @@ -523,19 +523,34 @@ 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, wakeup) +vm_page_unqueue(m) 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) && wakeup) { + if (queue == PQ_CACHE) { if ((cnt.v_cache_count + cnt.v_free_count) < (cnt.v_free_reserved + cnt.v_cache_min)) pagedaemon_wakeup(); @@ -721,7 +736,7 @@ vm_page_activate(m) if (m->queue == PQ_CACHE) cnt.v_reactivated++; - vm_page_unqueue(m, 1); + vm_page_unqueue(m); if (m->wire_count == 0) { TAILQ_INSERT_TAIL(&vm_page_queue_active, m, pageq); @@ -736,7 +751,7 @@ vm_page_activate(m) /* * helper routine for vm_page_free and vm_page_free_zero */ -__inline static int +static int vm_page_freechk_and_unqueue(m) vm_page_t m; { @@ -754,7 +769,7 @@ vm_page_freechk_and_unqueue(m) } vm_page_remove(m); - vm_page_unqueue(m,0); + vm_page_unqueue_nowakeup(m); if ((m->flags & PG_FICTITIOUS) != 0) { return 0; } @@ -773,7 +788,7 @@ vm_page_freechk_and_unqueue(m) /* * helper routine for vm_page_free and vm_page_free_zero */ -__inline static void +static __inline void vm_page_free_wakeup() { @@ -880,7 +895,7 @@ vm_page_wire(m) if (m->wire_count == 0) { s = splvm(); - vm_page_unqueue(m,1); + vm_page_unqueue(m); splx(s); cnt.v_wire_count++; } @@ -946,7 +961,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,1); + vm_page_unqueue(m); TAILQ_INSERT_TAIL(&vm_page_queue_inactive, m, pageq); m->queue = PQ_INACTIVE; cnt.v_inactive_count++; @@ -977,7 +992,7 @@ vm_page_cache(m) panic("vm_page_cache: caching a dirty page, pindex: %d", m->pindex); } s = splvm(); - vm_page_unqueue(m,0); + vm_page_unqueue_nowakeup(m); TAILQ_INSERT_TAIL(&vm_page_queue_cache, m, pageq); m->queue = PQ_CACHE; cnt.v_cache_count++; @@ -1016,7 +1031,7 @@ vm_page_set_validclean(m, base, size) m->valid |= pagebits; m->dirty &= ~pagebits; if( base == 0 && size == PAGE_SIZE) - pmap_tc_modified(m); + pmap_clear_modify(VM_PAGE_TO_PHYS(m)); } /* @@ -1056,8 +1071,10 @@ void vm_page_test_dirty(m) vm_page_t m; { - if (m->dirty != VM_PAGE_BITS_ALL) - pmap_tc_modified(m); + if ((m->dirty != VM_PAGE_BITS_ALL) && + pmap_is_modified(VM_PAGE_TO_PHYS(m))) { + m->dirty = VM_PAGE_BITS_ALL; + } } /* |