From ad86d7ceb2cbafef8663fd1e5d1f83c4fefb346f Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 9 Feb 2019 18:49:16 +0100 Subject: [PATCH] Disentangle pathways for cpu counts above and below 1024 --- driver/others/memory.c | 66 +++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/driver/others/memory.c b/driver/others/memory.c index 263ce4872..09851f15c 100644 --- a/driver/others/memory.c +++ b/driver/others/memory.c @@ -236,21 +236,30 @@ int get_num_procs(void) { #endif return nums; #else - cpusetp = CPU_ALLOC(nums); - if (cpusetp == NULL) { - return nums; - } - cpuset = *cpusetp; - size = CPU_ALLOC_SIZE(nums); - ret = sched_getaffinity(0,sizeof(cpuset),&cpuset); - if (ret!=0) { + if (nums >= CPU_SETSIZE) { + cpusetp = CPU_ALLOC(nums); + if (cpusetp == NULL) { + return nums; + } + size = CPU_ALLOC_SIZE(nums); + ret = sched_getaffinity(0,size,cpusetp); + if (ret!=0) { + CPU_FREE(cpusetp); + return nums; + } + ret = CPU_COUNT_S(size,cpusetp); + if (ret > 0 && ret < nums) nums = ret; CPU_FREE(cpusetp); return nums; + } else { + ret = sched_getaffinity(0,sizeof(cpuset),&cpuset); + if (ret!=0) { + return nums; + } + ret = CPU_COUNT(&cpuset); + if (ret > 0 && ret < nums) nums = ret; + return nums; } - ret = CPU_COUNT_S(size,cpusetp); - if (ret > 0 && ret < nums) nums = ret; - CPU_FREE(cpusetp); - return nums; #endif #endif } @@ -1763,21 +1772,30 @@ int get_num_procs(void) { #endif return nums; #else - cpusetp = CPU_ALLOC(nums); - if (cpusetp == NULL) { - return nums; - } - cpuset = *cpusetp; - size = CPU_ALLOC_SIZE(nums); - ret = sched_getaffinity(0,sizeof(cpuset),&cpuset); - if (ret!=0) { + if (nums >= CPU_SETSIZE) { + cpusetp = CPU_ALLOC(nums); + if (cpusetp == NULL) { + return nums; + } + size = CPU_ALLOC_SIZE(nums); + ret = sched_getaffinity(0,size,cpusetp); + if (ret!=0) { + CPU_FREE(cpusetp); + return nums; + } + ret = CPU_COUNT_S(size,cpusetp); + if (ret > 0 && ret < nums) nums = ret; CPU_FREE(cpusetp); return nums; + } else { + ret = sched_getaffinity(0,sizeof(cpuset),&cpuset); + if (ret!=0) { + return nums; + } + ret = CPU_COUNT(&cpuset); + if (ret > 0 && ret < nums) nums = ret; + return nums; } - ret = CPU_COUNT_S(size,cpusetp); - if (ret > 0 && ret < nums) nums = ret; - CPU_FREE(cpusetp); - return nums; #endif #endif }