summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/vm_pageout.c')
-rw-r--r--sys/vm/vm_pageout.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index a924459..1996180 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -65,7 +65,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_pageout.c,v 1.38 1995/02/22 10:27:24 davidg Exp $
+ * $Id: vm_pageout.c,v 1.39 1995/02/25 18:39:04 bde Exp $
*/
/*
@@ -205,14 +205,14 @@ vm_pageout_clean(m, sync)
*/
for (i = 0; i < pageout_count; i++) {
ms[i]->flags |= PG_BUSY;
- pmap_page_protect(VM_PAGE_TO_PHYS(ms[i]), VM_PROT_READ);
+ vm_page_protect(ms[i], VM_PROT_READ);
}
object->paging_in_progress += pageout_count;
} else {
m->flags |= PG_BUSY;
- pmap_page_protect(VM_PAGE_TO_PHYS(m), VM_PROT_READ);
+ vm_page_protect(m, VM_PROT_READ);
object->paging_in_progress++;
@@ -290,11 +290,7 @@ vm_pageout_clean(m, sync)
* collapse.
*/
if (pageout_status[i] != VM_PAGER_PEND) {
- if ((--object->paging_in_progress == 0) &&
- (object->flags & OBJ_PIPWNT)) {
- object->flags &= ~OBJ_PIPWNT;
- wakeup((caddr_t) object);
- }
+ vm_object_pip_wakeup(object);
if ((ms[i]->flags & (PG_REFERENCED|PG_WANTED)) ||
pmap_is_referenced(VM_PAGE_TO_PHYS(ms[i]))) {
pmap_clear_reference(VM_PAGE_TO_PHYS(ms[i]));
@@ -377,8 +373,7 @@ vm_pageout_object_deactivate_pages(map, object, count, map_remove_only)
if (!p->act_count) {
if (!map_remove_only)
vm_page_deactivate(p);
- pmap_page_protect(VM_PAGE_TO_PHYS(p),
- VM_PROT_NONE);
+ vm_page_protect(p, VM_PROT_NONE);
/*
* else if on the next go-around we
* will deactivate the page we need to
@@ -420,8 +415,7 @@ vm_pageout_object_deactivate_pages(map, object, count, map_remove_only)
TAILQ_INSERT_TAIL(&object->memq, p, listq);
}
} else if ((p->flags & (PG_INACTIVE | PG_BUSY)) == PG_INACTIVE) {
- pmap_page_protect(VM_PAGE_TO_PHYS(p),
- VM_PROT_NONE);
+ vm_page_protect(p, VM_PROT_NONE);
}
vm_page_unlock_queues();
p = next;
@@ -797,7 +791,16 @@ vm_pageout()
* The pageout daemon is never done, so loop forever.
*/
while (TRUE) {
- tsleep((caddr_t) &vm_pages_needed, PVM, "psleep", 0);
+ int s = splhigh();
+
+ if (!vm_pages_needed ||
+ ((cnt.v_free_count >= cnt.v_free_reserved) &&
+ (cnt.v_free_count + cnt.v_cache_count >= cnt.v_free_min))) {
+ vm_pages_needed = 0;
+ tsleep((caddr_t) &vm_pages_needed, PVM, "psleep", 0);
+ }
+ vm_pages_needed = 0;
+ splx(s);
cnt.v_pdwakeups++;
vm_pager_sync();
vm_pageout_scan();
OpenPOWER on IntegriCloud