From mboxrd@z Thu Jan 1 00:00:00 1970 From: Petr Holasek Subject: [PATCH] libnuma: add check for return value of numa_node_to_cpus Date: Wed, 14 Jan 2015 09:53:47 +0100 Message-ID: <1421225627-9272-1-git-send-email-pholasek@redhat.com> Return-path: Sender: linux-numa-owner@vger.kernel.org List-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-numa@vger.kernel.org Cc: Cliff Wickman , Petr Holasek When numa_node_to_cpu() has been called on machine with non-contiguous nodes, it returned the first node which wasn't present on machine. Now, return code is checked and code skips over non-existing nodes to the right one. Also, caching of numa_node_to_cpus_v2() result while non-zero error had been returned was disabled. Signed-off-by: Petr Holasek --- libnuma.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libnuma.c b/libnuma.c index 91425ae..8d7bf13 100644 --- a/libnuma.c +++ b/libnuma.c @@ -1382,8 +1382,12 @@ numa_node_to_cpus_v2(int node, struct bitmask *buffer) if (mask != buffer) numa_bitmask_free(mask); } else { - node_cpu_mask_v2[node] = mask; - } + /* we don't want to cache faulty result */ + if (!err) + node_cpu_mask_v2[node] = mask; + else + numa_bitmask_free(mask); + } return err; } __asm__(".symver numa_node_to_cpus_v2,numa_node_to_cpus@@libnuma_1.2"); @@ -1405,7 +1409,10 @@ int numa_node_of_cpu(int cpu) bmp = numa_bitmask_alloc(ncpus); nnodes = numa_max_node(); for (node = 0; node <= nnodes; node++){ - numa_node_to_cpus_v2_int(node, bmp); + if (numa_node_to_cpus_v2_int(node, bmp) < 0) { + /* It's possible for the node to not exist */ + continue; + } if (numa_bitmask_isbitset(bmp, cpu)){ ret = node; goto end; -- 2.1.0