summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/sys/eventhandler.h4
-rw-r--r--sys/vm/vm_pageout.c10
2 files changed, 13 insertions, 1 deletions
diff --git a/sys/sys/eventhandler.h b/sys/sys/eventhandler.h
index 59b1fc2..1378217 100644
--- a/sys/sys/eventhandler.h
+++ b/sys/sys/eventhandler.h
@@ -179,5 +179,9 @@ typedef void (*idle_eventhandler_t)(void *, int);
#define IDLE_PRI_LAST 20000
EVENTHANDLER_FAST_DECLARE(idle_event, idle_eventhandler_t);
+/* Low memory event */
+typedef void (*vm_lowmem_handler_t)(void *, int);
+#define LOWMEM_PRI_DEFAULT 0
+EVENTHANDLER_DECLARE(vm_lowmem, vm_lowmem_handler_t);
#endif /* SYS_EVENTHANDLER_H */
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 1f024e7..ec43082 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -76,6 +76,7 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/eventhandler.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
@@ -678,10 +679,17 @@ vm_pageout_scan(int pass)
GIANT_REQUIRED;
/*
+ * Decrease registered cache sizes.
+ */
+ EVENTHANDLER_INVOKE(vm_lowmem, 0);
+ /*
+ * We do this explicitly after the caches have been drained above.
+ */
+ uma_reclaim();
+ /*
* Do whatever cleanup that the pmap code can.
*/
vm_pageout_pmap_collect();
- uma_reclaim();
addl_page_shortage_init = vm_pageout_deficit;
vm_pageout_deficit = 0;
OpenPOWER on IntegriCloud