On Tue, Nov 14, 2017 at 15:47:39 +0100, Michal Privoznik wrote: > Since we already have such support for libxl all we need is qemu > driver adjustment. And a test case. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > src/qemu/qemu_command.c | 36 +++++++++++- > .../qemuxml2argv-numatune-distances.args | 63 +++++++++++++++++++++ > .../qemuxml2argv-numatune-distances.xml | 65 ++++++++++++++++++++++ > tests/qemuxml2argvtest.c | 2 + > 4 files changed, 165 insertions(+), 1 deletion(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-numatune-distances.args > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-numatune-distances.xml > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index eb72db33b..8b9daaea3 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -7675,7 +7675,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, > virCommandPtr cmd, > qemuDomainObjPrivatePtr priv) > { > - size_t i; > + size_t i, j; > virQEMUCapsPtr qemuCaps = priv->qemuCaps; > virBuffer buf = VIR_BUFFER_INITIALIZER; > char *cpumask = NULL, *tmpmask = NULL, *next = NULL; > @@ -7685,6 +7685,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, > int ret = -1; > size_t ncells = virDomainNumaGetNodeCount(def->numa); > const long system_page_size = virGetSystemPageSizeKB(); > + bool numa_distances = false; > > if (virDomainNumatuneHasPerNodeBinding(def->numa) && > !(virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_MEMORY_RAM) || > @@ -7793,6 +7794,39 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, > > virCommandAddArgBuffer(cmd, &buf); > } > + > + /* If NUMA node distance is specified for at least one pair > + * of nodes, we have to specify all the distances. Even > + * though they might be the default ones. */ > + for (i = 0; i < ncells; i++) { > + for (j = 0; j < ncells; j++) { > + if (!virDomainNumaNodeDistanceSpecified(def->numa, i, j)) > + continue; > + > + numa_distances = true; > + > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA_DIST)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("setting NUMA distances is not " > + "supported with this qemu")); > + goto cleanup; This capability does not need to be checked in the loop. Also the loop does not make sense to be finished once you deduct that 'numa_distances' is true. > + } > + } > + } > +
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list