From 8225f619ba2903ae43cfd27b7f7e95359a046484 Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Fri, 6 Dec 2019 01:21:07 +1100 Subject: [PATCH] util/os_misc: os_get_available_system_memory() for OpenBSD Return the smallest value of available non-kernel physical memory and the static per process data size limit as the amount of available system memory on OpenBSD. Fixes: b80930a6fea ("anv: add support for VK_EXT_memory_budget") Signed-off-by: Jonathan Gray Acked-by: Jason Ekstrand Part-of: (cherry picked from commit b30bd6fe5f254d895c1dec780f24518b3e880ed4) --- .pick_status.json | 2 +- src/util/os_misc.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index f95855c79a8..2d5bd8468e5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3334,7 +3334,7 @@ "description": "util/os_misc: os_get_available_system_memory() for OpenBSD", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "b80930a6fea075d2ef283ceac5a2a64e65fd7bc4" }, diff --git a/src/util/os_misc.c b/src/util/os_misc.c index 954900e3c5d..e184edc893d 100644 --- a/src/util/os_misc.c +++ b/src/util/os_misc.c @@ -28,6 +28,7 @@ #include "os_misc.h" #include "os_file.h" +#include "macros.h" #include @@ -57,6 +58,9 @@ # include #elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD # include +#elif DETECT_OS_OPENBSD +# include +# include #elif DETECT_OS_APPLE || DETECT_OS_BSD # include #elif DETECT_OS_HAIKU @@ -209,6 +213,22 @@ os_get_available_system_memory(uint64_t *size) free(meminfo); return false; +#elif DETECT_OS_OPENBSD + struct rlimit rl; + int mib[] = { CTL_HW, HW_USERMEM64 }; + int64_t mem_available; + size_t len = sizeof(mem_available); + + /* physmem - wired */ + if (sysctl(mib, 2, &mem_available, &len, NULL, 0) == -1) + return false; + + /* static login.conf limit */ + if (getrlimit(RLIMIT_DATA, &rl) == -1) + return false; + + *size = MIN2(mem_available, rl.rlim_cur); + return true; #else return false; #endif