
Daniel P. Berrange wrote:
On Fri, Aug 16, 2013 at 03:46:29PM -0600, Jim Fehlig wrote:
static int +libxlCapsInitNuma(libxl_ctx *ctx, virCapsPtr caps) +{ + libxl_numainfo *numa_info = NULL; + libxl_cputopology *cpu_topo = NULL; + int nr_nodes = 0, nr_cpus = 0; + virCapsHostNUMACellCPUPtr *cpus = NULL; + int *nr_cpus_node = NULL; + size_t i; + int ret = -1; + + /* Let's try to fetch all the topology information */ + numa_info = libxl_get_numainfo(ctx, &nr_nodes); + if (numa_info == NULL || nr_nodes == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("libxl_get_numainfo failed"));
You're reporting a useful error here....
+ goto cleanup; + } else { + cpu_topo = libxl_get_cpu_topology(ctx, &nr_cpus); + if (cpu_topo == NULL || nr_cpus == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("libxl_get_cpu_topology failed"));
And here, and so on....
+ + ret = 0; + + cleanup: + if (ret != 0) { + /* Something went wrong: deallocate everything and unref caps */ + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("libxenlight failed to build the NUMA topology"));
And overwriting the error with something useless. Just remove this call to virReportError. Add a VIR_DEBUG log in its place if you want something to highlight the situation in debugging modes.
Thanks for catching that. I've removed the unnecessary error reporting and pushed the patch. Regards, Jim
+ + for (i = 0; i < nr_nodes; i++) + VIR_FREE(cpus[i]); + virCapabilitiesFreeNUMAInfo(caps); + } + + VIR_FREE(cpus); + VIR_FREE(nr_cpus_node); + libxl_cputopology_list_free(cpu_topo, nr_cpus); + libxl_numainfo_list_free(numa_info, nr_nodes); + + return ret; +} + +static int libxlCapsInitGuests(libxl_ctx *ctx, virCapsPtr caps) { const libxl_version_info *ver_info; @@ -880,6 +993,9 @@ libxlMakeCapabilities(libxl_ctx *ctx) if (libxlCapsInitHost(ctx, caps) < 0) goto error;
+ if (libxlCapsInitNuma(ctx, caps) < 0) + goto error; + if (libxlCapsInitGuests(ctx, caps) < 0) goto error;
ACK if that change above is made before pushing
Daniel