summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2017-03-04 12:05:50 +0000
committeravg <avg@FreeBSD.org>2017-03-04 12:05:50 +0000
commita3480d5c9e3eb277d85d4bef6f03fd62eb864799 (patch)
treea9146a3e7a8d762f5aed0a9192a95df820cf5cda
parent260403d5d9a1562706097ac2adb2b45cd7f99668 (diff)
downloadFreeBSD-src-a3480d5c9e3eb277d85d4bef6f03fd62eb864799.zip
FreeBSD-src-a3480d5c9e3eb277d85d4bef6f03fd62eb864799.tar.gz
MFC r314272: call vm_lowmem hook in uma_reclaim_worker
-rw-r--r--sys/vm/uma_core.c4
-rw-r--r--sys/vm/vm_kern.c8
-rw-r--r--sys/vm/vm_pageout.c2
-rw-r--r--sys/vm/vm_pageout.h6
4 files changed, 16 insertions, 4 deletions
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index 11dceeb..908db9e 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bitset.h>
+#include <sys/eventhandler.h>
#include <sys/kernel.h>
#include <sys/types.h>
#include <sys/queue.h>
@@ -3244,6 +3245,9 @@ uma_reclaim_worker(void *arg __unused)
"umarcl", 0);
if (uma_reclaim_needed) {
uma_reclaim_needed = 0;
+ sx_xunlock(&uma_drain_lock);
+ EVENTHANDLER_INVOKE(vm_lowmem, VM_LOW_KMEM);
+ sx_xlock(&uma_drain_lock);
uma_reclaim_locked(true);
}
}
diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c
index d605c23..df5a26b 100644
--- a/sys/vm/vm_kern.c
+++ b/sys/vm/vm_kern.c
@@ -542,11 +542,13 @@ debug_vm_lowmem(SYSCTL_HANDLER_ARGS)
error = sysctl_handle_int(oidp, &i, 0, req);
if (error)
return (error);
- if (i)
- EVENTHANDLER_INVOKE(vm_lowmem, 0);
+ if ((i & ~(VM_LOW_KMEM | VM_LOW_PAGES)) != 0)
+ return (EINVAL);
+ if (i != 0)
+ EVENTHANDLER_INVOKE(vm_lowmem, i);
return (0);
}
SYSCTL_PROC(_debug, OID_AUTO, vm_lowmem, CTLTYPE_INT | CTLFLAG_RW, 0, 0,
- debug_vm_lowmem, "I", "set to trigger vm_lowmem event");
+ debug_vm_lowmem, "I", "set to trigger vm_lowmem event with given flags");
#endif
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 6928c20..41297e3 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -962,7 +962,7 @@ vm_pageout_scan(struct vm_domain *vmd, int pass)
* Decrease registered cache sizes.
*/
SDT_PROBE0(vm, , , vm__lowmem_scan);
- EVENTHANDLER_INVOKE(vm_lowmem, 0);
+ EVENTHANDLER_INVOKE(vm_lowmem, VM_LOW_PAGES);
/*
* We do this explicitly after the caches have been
* drained above.
diff --git a/sys/vm/vm_pageout.h b/sys/vm/vm_pageout.h
index c7b4e90..93f911c 100644
--- a/sys/vm/vm_pageout.h
+++ b/sys/vm/vm_pageout.h
@@ -87,6 +87,12 @@ extern int vm_pageout_page_count;
#define VM_OOM_SWAPZ 2
/*
+ * vm_lowmem flags.
+ */
+#define VM_LOW_KMEM 0x01
+#define VM_LOW_PAGES 0x02
+
+/*
* Exported routines.
*/
OpenPOWER on IntegriCloud