diff --git a/src/os.c b/src/os.c index 3066dad5..f15a2197 100644 --- a/src/os.c +++ b/src/os.c @@ -51,6 +51,14 @@ terms of the MIT license. A copy of the license can be found in the file #include #endif #endif +#if defined(__FreeBSD__) +#include +#if __FreeBSD_version >= 1200000 +#include +#include +#include +#endif +#endif #endif /* ----------------------------------------------------------- @@ -1236,6 +1244,29 @@ static size_t mi_os_numa_node_countx(void) { } return (node+1); } +#elif defined(__FreeBSD__) && __FreeBSD_version >= 1200000 +static size_t mi_os_numa_nodex(void) { + domainset_t dom; + size_t node; + int policy; + + if (cpuset_getdomain(CPU_LEVEL_CPUSET, CPU_WHICH_PID, -1, sizeof(dom), &dom, &policy) == -1) return 0ul; + + for (node = 0; node < MAXMEMDOM; node++) { + if (DOMAINSET_ISSET(node, &dom)) return node; + } + + return 0ul; +} + +static size_t mi_os_numa_node_countx(void) { + size_t ndomains = 0; + size_t len = sizeof(ndomains); + + if (sysctlbyname("vm.ndomains", &ndomains, &len, NULL, 0) == -1) return 0ul; + + return ndomains; +} #else static size_t mi_os_numa_nodex(void) { return 0;