From: Viktor Mihajlovski Date: Fri, 22 Sep 2017 14:12:23 +0000 (+0200) Subject: numa: avoid failure in nodememstats on non-NUMA systems X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=010f88d5cb4eee45eaaf13c26164fd80dae1c942;p=libvirt.git numa: avoid failure in nodememstats on non-NUMA systems libvirt reports a fake NUMA topology in virConnectGetCapabilities even if built without numactl support. The fake NUMA topology consists of a single cell representing the host's cpu and memory resources. Currently this is the case for ARM and s390[x] RPM builds. A client iterating over NUMA cells obtained via virConnectGetCapabilities and invoking virNodeGetMemoryStats on them will see an internal failure "NUMA isn't available on this host" from virNumaGetMaxNode. An example for such a client is VDSM. Since the intention seems to be that libvirt always reports at least a single cell it is necessary to return "fake" node memory statistics matching the previously reported fake cell in case NUMA isn't supported on the system. Signed-off-by: Viktor Mihajlovski --- diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c index a9ba2784ac..11efe8c502 100644 --- a/src/util/virhostmem.c +++ b/src/util/virhostmem.c @@ -267,6 +267,14 @@ virHostMemGetStats(int cellNum ATTRIBUTE_UNUSED, FILE *meminfo; int max_node; + /* + * Even if built without numactl, libvirt claims + * to have a one-cells NUMA topology. In such a + * case return the statistics for the entire host. + */ + if (!virNumaIsAvailable() && cellNum == 0) + cellNum = VIR_NODE_MEMORY_STATS_ALL_CELLS; + if (cellNum == VIR_NODE_MEMORY_STATS_ALL_CELLS) { if (VIR_STRDUP(meminfo_path, MEMINFO_PATH) < 0) return -1;