From 11a48758a7d6c946062c130b6186ae3eadd58e39 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Thu, 30 Oct 2014 07:34:30 +0100 Subject: [PATCH] qemu: make advice from numad available when building commandline Particularly in qemuBuildNumaArgStr(), there was a need for the advice due to memory backing, which needs to know the nodeset it will be pinned to. With newer qemu this caused the following error when starting domain: error: internal error: Advice from numad is needed in case of automatic numa placement even when starting perfectly valid domain, e.g.: ... 4 ... Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1138545 Signed-off-by: Martin Kletzander --- src/qemu/qemu_command.c | 10 ++++++---- src/qemu/qemu_command.h | 3 ++- src/qemu/qemu_driver.c | 3 ++- src/qemu/qemu_process.c | 3 ++- tests/qemuxml2argvtest.c | 3 ++- tests/qemuxmlnstest.c | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2e5af4f941..207e2b0465 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6636,7 +6636,8 @@ static int qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, const virDomainDef *def, virCommandPtr cmd, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + virBitmapPtr nodeset) { size_t i, j; virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -6796,7 +6797,7 @@ qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg, virBufferAsprintf(&buf, ",size=%dM,id=ram-node%zu", cellmem, i); - if (virDomainNumatuneMaybeFormatNodeset(def->numatune, NULL, + if (virDomainNumatuneMaybeFormatNodeset(def->numatune, nodeset, &nodemask, i) < 0) goto cleanup; @@ -7764,7 +7765,8 @@ qemuBuildCommandLine(virConnectPtr conn, virNetDevVPortProfileOp vmop, qemuBuildCommandLineCallbacksPtr callbacks, bool standalone, - bool enableFips) + bool enableFips, + virBitmapPtr nodeset) { virErrorPtr originalError = NULL; size_t i, j; @@ -7992,7 +7994,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (def->cpu && def->cpu->ncells) - if (qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps) < 0) + if (qemuBuildNumaArgStr(cfg, def, cmd, qemuCaps, nodeset) < 0) goto error; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_UUID)) diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index aa40c9ee3a..f7d3c2d16c 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -79,7 +79,8 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn, virNetDevVPortProfileOp vmop, qemuBuildCommandLineCallbacksPtr callbacks, bool forXMLToArgv, - bool enableFips) + bool enableFips, + virBitmapPtr nodeset) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(11); /* Generate '-device' string for chardev device */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2eaf77d0b2..4f5bc7f627 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6472,7 +6472,8 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, &buildCommandLineCallbacks, true, - qemuCheckFips()))) + qemuCheckFips(), + NULL))) goto cleanup; ret = virCommandToString(cmd); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ba8ba82665..26d494825a 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4362,7 +4362,8 @@ int qemuProcessStart(virConnectPtr conn, priv->monJSON, priv->qemuCaps, migrateFrom, stdin_fd, snapshot, vmop, &buildCommandLineCallbacks, false, - qemuCheckFips()))) + qemuCheckFips(), + nodemask))) goto cleanup; /* now that we know it is about to start call the hook if present */ diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 0e9fab9d10..9b8e3e20fc 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -362,7 +362,8 @@ static int testCompareXMLToArgvFiles(const char *xml, migrateFrom, migrateFd, NULL, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, &testCallbacks, false, - (flags & FLAG_FIPS)))) { + (flags & FLAG_FIPS), + NULL))) { if (!virtTestOOMActive() && (flags & FLAG_EXPECT_FAILURE)) { ret = 0; diff --git a/tests/qemuxmlnstest.c b/tests/qemuxmlnstest.c index b3a608cc3e..2f37a260bd 100644 --- a/tests/qemuxmlnstest.c +++ b/tests/qemuxmlnstest.c @@ -119,7 +119,7 @@ static int testCompareXMLToArgvFiles(const char *xml, vmdef, &monitor_chr, json, extraFlags, migrateFrom, migrateFd, NULL, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, - &testCallbacks, false, false))) + &testCallbacks, false, false, NULL))) goto fail; if (!virtTestOOMActive()) {