提交 625980cc 编写于 作者: D Dario Faggioli 提交者: Jim Fehlig

libxl: fix node ranges in libxlNodeGetCellsFreeMemory()

introduced by cs 4b9eec50 ("libxl: implement per
NUMA node free memory reporting"). What was wrong was that
libxl_get_numainfo() put in nr_nodes the actual number of
host NUMA nodes, not the highest node ID (like libnuma's
numa_max_node() does instead).

While at it, turn the failure of libxl_get_numainfo() from
a simple warning to a proper error, as requested during the
review of another patch of the original series.
Signed-off-by: NDario Faggioli <dario.faggioli@citrix.com>
Cc: Daniel P. Berrange <berrange@redhat.com>
上级 70024dc9
......@@ -4127,23 +4127,23 @@ libxlNodeGetCellsFreeMemory(virConnectPtr conn,
if (virNodeGetCellsFreeMemoryEnsureACL(conn) < 0)
return -1;
/* Early failure is probably worth just a warning */
numa_info = libxl_get_numainfo(driver->ctx, &nr_nodes);
if (numa_info == NULL || nr_nodes == 0) {
VIR_WARN("libxl_get_numainfo failed to retrieve NUMA data");
return 0;
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("libxl_get_numainfo failed"));
goto cleanup;
}
/* Check/sanitize the cell range */
if (startCell > nr_nodes) {
if (startCell >= nr_nodes) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("start cell %d out of range (0-%d)"),
startCell, nr_nodes);
startCell, nr_nodes - 1);
goto cleanup;
}
lastCell = startCell + maxCells - 1;
if (lastCell > nr_nodes)
lastCell = nr_nodes;
if (lastCell >= nr_nodes)
lastCell = nr_nodes - 1;
for (numCells = 0, n = startCell; n <= lastCell; n++) {
if (numa_info[n].size == LIBXL_NUMAINFO_INVALID_ENTRY)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册