summaryrefslogtreecommitdiffstats
path: root/sys/uvm/uvm_km.c
diff options
context:
space:
mode:
authorniklas <niklas@openbsd.org>2004-12-30 08:28:39 +0000
committerniklas <niklas@openbsd.org>2004-12-30 08:28:39 +0000
commitbbd99cb42b83d484b859f9f826a30df6c2ef310c (patch)
tree4cb579f132e0a5d80cceb09496ba9b3a6c899a5d /sys/uvm/uvm_km.c
parentEnable udav now it works on alpha. ok dlg@ (diff)
downloadwireguard-openbsd-bbd99cb42b83d484b859f9f826a30df6c2ef310c.tar.xz
wireguard-openbsd-bbd99cb42b83d484b859f9f826a30df6c2ef310c.zip
Import M_CANFAIL support from NetBSD, removes a nasty panic during low-mem scenarios, instead generating an ENOMEM backfeed, ok tedu@, prodded by many
Diffstat (limited to 'sys/uvm/uvm_km.c')
-rw-r--r--sys/uvm/uvm_km.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/uvm/uvm_km.c b/sys/uvm/uvm_km.c
index 69d36e16eae..e34f1b4161c 100644
--- a/sys/uvm/uvm_km.c
+++ b/sys/uvm/uvm_km.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_km.c,v 1.44 2004/08/24 07:16:12 tedu Exp $ */
+/* $OpenBSD: uvm_km.c,v 1.45 2004/12/30 08:28:39 niklas Exp $ */
/* $NetBSD: uvm_km.c,v 1.42 2001/01/14 02:10:01 thorpej Exp $ */
/*
@@ -537,10 +537,12 @@ uvm_km_kmemalloc(map, obj, size, flags)
*/
if (__predict_false(pg == NULL)) {
- if (flags & UVM_KMF_NOWAIT) {
+ if ((flags & UVM_KMF_NOWAIT) ||
+ ((flags & UVM_KMF_CANFAIL) &&
+ uvmexp.swpgonly == uvmexp.swpages)) {
/* free everything! */
uvm_unmap(map, kva, kva + size);
- return(0);
+ return (0);
} else {
uvm_wait("km_getwait2"); /* sleep here */
continue;