diff options
-rw-r--r-- | sys/sys/eventhandler.h | 4 | ||||
-rw-r--r-- | sys/vm/vm_pageout.c | 10 |
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; |