as written in docs, one must parse capabilities XML to get the right count of NUMA nodes. --- tools/virsh.c | 27 ++++++++++++++++----------- 1 files changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index 8804fc3..1086555 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -2333,8 +2333,9 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd) int cell, cell_given; unsigned long long memory; unsigned long long *nodes = NULL; + unsigned long nodes_cnt; int all_given; - virNodeInfo info; + char *node_xml; if (!vshConnectionUsability(ctl, ctl->conn)) @@ -2350,30 +2351,33 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd) } if (all_given) { - if (virNodeGetInfo(ctl->conn, &info) < 0) { - vshError(ctl, "%s", _("failed to get NUMA nodes count")); + node_xml = virConnectGetCapabilities(ctl->conn); + if (!node_xml) { + vshError(ctl, "%s", _("unable to get node capabilities")); goto cleanup; } - if (!info.nodes) { - vshError(ctl, "%s", _("no NUMA nodes present")); - goto cleanup; - } + ret = xPathULong(node_xml, + (char*)"string(/capabilities/host/topology/cells/@num)", + &nodes_cnt); + + if (ret) + nodes_cnt = 1; - if (VIR_ALLOC_N(nodes, info.nodes) < 0) { + if (VIR_ALLOC_N(nodes, nodes_cnt) < 0) { vshError(ctl, "%s", _("could not allocate memory")); goto cleanup; } - ret = virNodeGetCellsFreeMemory(ctl->conn, nodes, 0, info.nodes); - if (ret != info.nodes) { + ret = virNodeGetCellsFreeMemory(ctl->conn, nodes, 0, nodes_cnt); + if (ret != nodes_cnt) { vshError(ctl, "%s", _("could not get information about " "all NUMA nodes")); goto cleanup; } memory = 0; - for (cell = 0; cell < info.nodes; cell++) { + for (cell = 0; cell < nodes_cnt; cell++) { vshPrint(ctl, "%5d: %10llu kB\n", cell, (nodes[cell]/1024)); memory += nodes[cell]; } @@ -2401,6 +2405,7 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd) cleanup: VIR_FREE(nodes); + VIR_FREE(node_xml); return func_ret; } -- 1.7.3.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list