From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> Remove all use of the existing APIs for querying QEMU capability flags. Instead obtain a qemuCapsPtr object from the global cache. This avoids the execution of 'qemu -help' (and related commands) when launching new guests. Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- src/qemu/qemu_capabilities.c | 92 ++++---------------------------------------- src/qemu/qemu_capabilities.h | 11 ++---- src/qemu/qemu_command.c | 85 +++++++++------------------------------- src/qemu/qemu_command.h | 3 +- src/qemu/qemu_driver.c | 63 +++++++++++++++++++++--------- src/qemu/qemu_process.c | 21 +++------- tests/qemuxml2argvtest.c | 4 -- tests/qemuxmlnstest.c | 4 -- 8 files changed, 81 insertions(+), 202 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f07f9f1..90dc344 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1449,79 +1449,6 @@ qemuCapsParseDeviceStr(const char *str, qemuCapsPtr caps) return 0; } -int qemuCapsExtractVersionInfo(const char *qemu, - const char *arch, - bool check_yajl, - unsigned int *retversion, - qemuCapsPtr *retcaps) -{ - int ret = -1; - unsigned int version, is_kvm, kvm_version; - qemuCapsPtr caps = NULL; - char *help = NULL; - virCommandPtr cmd; - - if (retcaps) - *retcaps = NULL; - if (retversion) - *retversion = 0; - - /* Make sure the binary we are about to try exec'ing exists. - * Technically we could catch the exec() failure, but that's - * in a sub-process so it's hard to feed back a useful error. - */ - if (!virFileIsExecutable(qemu)) { - virReportSystemError(errno, _("Cannot find QEMU binary %s"), qemu); - return -1; - } - - cmd = qemuCapsProbeCommand(qemu, NULL); - virCommandAddArgList(cmd, "-help", NULL); - virCommandSetOutputBuffer(cmd, &help); - - if (virCommandRun(cmd, NULL) < 0) - goto cleanup; - - if (!(caps = qemuCapsNew()) || - qemuCapsParseHelpStr(qemu, help, caps, - &version, &is_kvm, &kvm_version, - check_yajl) == -1) - goto cleanup; - - /* Currently only x86_64 and i686 support PCI-multibus. */ - if (STREQLEN(arch, "x86_64", 6) || - STREQLEN(arch, "i686", 4)) { - qemuCapsSet(caps, QEMU_CAPS_PCI_MULTIBUS); - } - - /* S390 and probably other archs do not support no-acpi - - maybe the qemu option parsing should be re-thought. */ - if (STRPREFIX(arch, "s390")) - qemuCapsClear(caps, QEMU_CAPS_NO_ACPI); - - /* qemuCapsExtractDeviceStr will only set additional caps if qemu - * understands the 0.13.0+ notion of "-device driver,". */ - if (qemuCapsGet(caps, QEMU_CAPS_DEVICE) && - strstr(help, "-device driver,?") && - qemuCapsExtractDeviceStr(qemu, caps) < 0) - goto cleanup; - - if (retversion) - *retversion = version; - if (retcaps) { - *retcaps = caps; - caps = NULL; - } - - ret = 0; - -cleanup: - VIR_FREE(help); - virCommandFree(cmd); - virObjectUnref(caps); - - return ret; -} static void uname_normalize (struct utsname *ut) @@ -1537,12 +1464,13 @@ uname_normalize (struct utsname *ut) ut->machine[1] = '6'; } -int qemuCapsExtractVersion(virCapsPtr caps, - unsigned int *version) +int qemuCapsGetDefaultVersion(virCapsPtr caps, + qemuCapsCachePtr capsCache, + unsigned int *version) { const char *binary; - struct stat sb; struct utsname ut; + qemuCapsPtr qemucaps; if (*version > 0) return 0; @@ -1557,17 +1485,11 @@ int qemuCapsExtractVersion(virCapsPtr caps, return -1; } - if (stat(binary, &sb) < 0) { - virReportSystemError(errno, - _("Cannot find QEMU binary %s"), binary); - return -1; - } - - if (qemuCapsExtractVersionInfo(binary, ut.machine, false, - version, NULL) < 0) { + if (!(qemucaps = qemuCapsCacheLookup(capsCache, binary))) return -1; - } + *version = qemuCapsGetVersion(qemucaps); + virObjectUnref(qemucaps); return 0; } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ecf7b68..cfbd811 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -27,6 +27,7 @@ # include "virobject.h" # include "capabilities.h" # include "command.h" +# include "virobject.h" /* Internal flags to keep track of qemu command line capabilities */ enum qemuCapsFlags { @@ -205,13 +206,9 @@ int qemuCapsProbeCPUModels(const char *qemu, size_t *count, const char ***cpus); -int qemuCapsExtractVersion(virCapsPtr caps, - unsigned int *version); -int qemuCapsExtractVersionInfo(const char *qemu, - const char *arch, - bool check_yajl, - unsigned int *version, - qemuCapsPtr *retcaps); +int qemuCapsGetDefaultVersion(virCapsPtr caps, + qemuCapsCachePtr capsCache, + unsigned int *version); int qemuCapsParseHelpStr(const char *qemu, const char *str, diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index d0c8e22..9e9b66d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -810,33 +810,13 @@ qemuDomainPrimeS390VirtioDevices(virDomainDefPtr def, } -static int +static void qemuDomainAssignS390Addresses(virDomainDefPtr def, qemuCapsPtr caps) { - int ret = -1; - qemuCapsPtr localCaps = NULL; - - if (!caps) { - /* need to get information from real environment */ - if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, - false, NULL, - &localCaps) < 0) - goto cleanup; - caps = localCaps; - } - - if (qemuCapsGet(caps, QEMU_CAPS_VIRTIO_S390)) { - /* deal with legacy virtio-s390 */ + /* deal with legacy virtio-s390 */ + if (qemuCapsGet(caps, QEMU_CAPS_VIRTIO_S390)) qemuDomainPrimeS390VirtioDevices( def, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390); - } - - ret = 0; - -cleanup: - virObjectUnref(localCaps); - - return ret; } static int @@ -863,7 +843,7 @@ qemuAssignSpaprVIOAddress(virDomainDefPtr def, virDomainDeviceInfoPtr info, unsigned long long default_reg) { bool user_reg; - int rc; + int ret; if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) return 0; @@ -875,8 +855,8 @@ qemuAssignSpaprVIOAddress(virDomainDefPtr def, virDomainDeviceInfoPtr info, info->addr.spaprvio.has_reg = true; } - rc = virDomainDeviceInfoIterate(def, qemuSpaprVIOFindByReg, info); - while (rc != 0) { + ret = virDomainDeviceInfoIterate(def, qemuSpaprVIOFindByReg, info); + while (ret != 0) { if (user_reg) { virReportError(VIR_ERR_XML_ERROR, _("spapr-vio address %#llx already in use"), @@ -886,7 +866,7 @@ qemuAssignSpaprVIOAddress(virDomainDefPtr def, virDomainDeviceInfoPtr info, /* We assigned the reg, so try a new value */ info->addr.spaprvio.reg += 0x1000; - rc = virDomainDeviceInfoIterate(def, qemuSpaprVIOFindByReg, info); + ret = virDomainDeviceInfoIterate(def, qemuSpaprVIOFindByReg, info); } return 0; @@ -895,45 +875,32 @@ qemuAssignSpaprVIOAddress(virDomainDefPtr def, virDomainDeviceInfoPtr info, int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, qemuCapsPtr caps) { - int i, rc = -1; + int i, ret = -1; int model; - qemuCapsPtr localCaps = NULL; /* Default values match QEMU. See spapr_(llan|vscsi|vty).c */ - if (!caps) { - /* need to get information from real environment */ - if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, - false, NULL, - &localCaps) < 0) - goto cleanup; - caps = localCaps; - } - for (i = 0 ; i < def->nnets; i++) { if (def->nets[i]->model && STREQ(def->nets[i]->model, "spapr-vlan")) def->nets[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; - rc = qemuAssignSpaprVIOAddress(def, &def->nets[i]->info, - 0x1000ul); - if (rc) + if (qemuAssignSpaprVIOAddress(def, &def->nets[i]->info, + 0x1000ul) < 0) goto cleanup; } for (i = 0 ; i < def->ncontrollers; i++) { model = def->controllers[i]->model; if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { - rc = qemuSetScsiControllerModel(def, caps, &model); - if (rc) + if (qemuSetScsiControllerModel(def, caps, &model) < 0) goto cleanup; } if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI && def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) def->controllers[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; - rc = qemuAssignSpaprVIOAddress(def, &def->controllers[i]->info, - 0x2000ul); - if (rc) + if (qemuAssignSpaprVIOAddress(def, &def->controllers[i]->info, + 0x2000ul) < 0) goto cleanup; } @@ -943,19 +910,17 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, STREQ(def->os.arch, "ppc64") && STREQ(def->os.machine, "pseries")) def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO; - rc = qemuAssignSpaprVIOAddress(def, &def->serials[i]->info, - 0x30000000ul); - if (rc) + if (qemuAssignSpaprVIOAddress(def, &def->serials[i]->info, + 0x30000000ul) < 0) goto cleanup; } /* No other devices are currently supported on spapr-vio */ - rc = 0; + ret = 0; cleanup: - virObjectUnref(localCaps); - return rc; + return ret; } #define QEMU_PCI_ADDRESS_LAST_SLOT 31 @@ -1070,20 +1035,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, virDomainObjPtr obj) { int ret = -1; - qemuCapsPtr localCaps = NULL; qemuDomainPCIAddressSetPtr addrs = NULL; qemuDomainObjPrivatePtr priv = NULL; - if (!caps) { - /* need to get information from real environment */ - if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, - false, - NULL, - &localCaps) < 0) - goto cleanup; - caps = localCaps; - } - if (qemuCapsGet(caps, QEMU_CAPS_DEVICE)) { if (!(addrs = qemuDomainPCIAddressSetCreate(def))) goto cleanup; @@ -1108,7 +1062,6 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, ret = 0; cleanup: - virObjectUnref(localCaps); qemuDomainPCIAddressSetFree(addrs); return ret; @@ -1124,9 +1077,7 @@ int qemuDomainAssignAddresses(virDomainDefPtr def, if (rc) return rc; - rc = qemuDomainAssignS390Addresses(def, caps); - if (rc) - return rc; + qemuDomainAssignS390Addresses(def, caps); return qemuDomainAssignPCIAddresses(def, caps, obj); } diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index dc4ce8e..3f70d85 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -188,7 +188,8 @@ virDomainDefPtr qemuParseCommandLinePid(virCapsPtr caps, int qemuDomainAssignAddresses(virDomainDefPtr def, qemuCapsPtr caps, - virDomainObjPtr); + virDomainObjPtr obj) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def, qemuCapsPtr caps); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4bfc0fc..35efd6a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1417,7 +1417,9 @@ static int qemudGetVersion(virConnectPtr conn, unsigned long *version) { int ret = -1; qemuDriverLock(driver); - if (qemuCapsExtractVersion(driver->caps, &driver->qemuVersion) < 0) + if (qemuCapsGetDefaultVersion(driver->caps, + driver->capsCache, + &driver->qemuVersion) < 0) goto cleanup; *version = driver->qemuVersion; @@ -1459,6 +1461,7 @@ static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml, virDomainEventPtr event = NULL; virDomainEventPtr event2 = NULL; unsigned int start_flags = VIR_QEMU_PROCESS_START_COLD; + qemuCapsPtr caps = NULL; virCheckFlags(VIR_DOMAIN_START_PAUSED | VIR_DOMAIN_START_AUTODESTROY, NULL); @@ -1480,10 +1483,13 @@ static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml, if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0) goto cleanup; + if (!(caps = qemuCapsCacheLookup(driver->capsCache, def->emulator))) + goto cleanup; + if (qemudCanonicalizeMachine(driver, def) < 0) goto cleanup; - if (qemuDomainAssignAddresses(def, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(def, caps, NULL) < 0) goto cleanup; if (!(vm = virDomainAssignDef(driver->caps, @@ -1537,6 +1543,7 @@ cleanup: if (event2) qemuDomainEventQueue(driver, event2); } + virObjectUnref(caps); qemuDriverUnlock(driver); return dom; } @@ -5155,6 +5162,9 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, if (!def) goto cleanup; + if (!(caps = qemuCapsCacheLookup(driver->capsCache, def->emulator))) + goto cleanup; + /* Since we're just exporting args, we can't do bridge/network/direct * setups, since libvirt will normally create TAP/macvtap devices * directly. We convert those configs into generic 'ethernet' @@ -5223,12 +5233,6 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, net->info.bootIndex = bootIndex; } - if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch, - false, - NULL, - &caps) < 0) - goto cleanup; - monitor_json = qemuCapsGet(caps, QEMU_CAPS_MONITOR_JSON); if (qemuProcessPrepareMonitorChr(driver, &monConfig, def->name) < 0) @@ -5522,6 +5526,7 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) { virDomainObjPtr vm = NULL; virDomainPtr dom = NULL; virDomainEventPtr event = NULL; + qemuCapsPtr caps = NULL; int dupVM; qemuDriverLock(driver); @@ -5536,10 +5541,13 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) { if ((dupVM = virDomainObjIsDuplicate(&driver->domains, def, 0)) < 0) goto cleanup; + if (!(caps = qemuCapsCacheLookup(driver->capsCache, def->emulator))) + goto cleanup; + if (qemudCanonicalizeMachine(driver, def) < 0) goto cleanup; - if (qemuDomainAssignAddresses(def, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(def, caps, NULL) < 0) goto cleanup; /* We need to differentiate two cases: @@ -5602,6 +5610,7 @@ cleanup: virDomainObjUnlock(vm); if (event) qemuDomainEventQueue(driver, event); + virObjectUnref(caps); qemuDriverUnlock(driver); return dom; } @@ -6020,7 +6029,8 @@ qemuDomainUpdateDeviceLive(virDomainObjPtr vm, } static int -qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, +qemuDomainAttachDeviceConfig(qemuCapsPtr caps, + virDomainDefPtr vmdef, virDomainDeviceDefPtr dev) { virDomainDiskDefPtr disk; @@ -6046,7 +6056,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) if (virDomainDefAddImplicitControllers(vmdef) < 0) return -1; - if (qemuDomainAssignAddresses(vmdef, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(vmdef, caps, NULL) < 0) return -1; break; @@ -6065,7 +6075,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, return -1; } dev->data.net = NULL; - if (qemuDomainAssignAddresses(vmdef, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(vmdef, caps, NULL) < 0) return -1; break; @@ -6081,7 +6091,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, return -1; } dev->data.hostdev = NULL; - if (qemuDomainAssignAddresses(vmdef, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(vmdef, caps, NULL) < 0) return -1; break; @@ -6113,7 +6123,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, return -1; dev->data.controller = NULL; - if (qemuDomainAssignAddresses(vmdef, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(vmdef, caps, NULL) < 0) return -1; break; @@ -6206,7 +6216,8 @@ qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef, } static int -qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, +qemuDomainUpdateDeviceConfig(qemuCapsPtr caps, + virDomainDefPtr vmdef, virDomainDeviceDefPtr dev) { virDomainDiskDefPtr orig, disk; @@ -6266,7 +6277,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, vmdef->nets[pos] = net; dev->data.net = NULL; - if (qemuDomainAssignAddresses(vmdef, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(vmdef, caps, NULL) < 0) return -1; break; @@ -6297,6 +6308,8 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, bool force = (flags & VIR_DOMAIN_DEVICE_MODIFY_FORCE) != 0; int ret = -1; unsigned int affect; + qemuCapsPtr caps = NULL; + qemuDomainObjPrivatePtr priv; virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG | @@ -6314,6 +6327,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, _("no domain with matching uuid '%s'"), uuidstr); goto cleanup; } + priv = vm->privateData; if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0) goto cleanup; @@ -6355,6 +6369,11 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, goto endjob; } + if (priv->caps) + caps = virObjectRef(priv->caps); + else if (!(caps = qemuCapsCacheLookup(driver->capsCache, vm->def->emulator))) + goto cleanup; + if (flags & VIR_DOMAIN_AFFECT_CONFIG) { if (virDomainDefCompatibleDevice(vm->def, dev) < 0) goto endjob; @@ -6365,13 +6384,13 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml, goto endjob; switch (action) { case QEMU_DEVICE_ATTACH: - ret = qemuDomainAttachDeviceConfig(vmdef, dev); + ret = qemuDomainAttachDeviceConfig(caps, vmdef, dev); break; case QEMU_DEVICE_DETACH: ret = qemuDomainDetachDeviceConfig(vmdef, dev); break; case QEMU_DEVICE_UPDATE: - ret = qemuDomainUpdateDeviceConfig(vmdef, dev); + ret = qemuDomainUpdateDeviceConfig(caps, vmdef, dev); break; default: virReportError(VIR_ERR_INTERNAL_ERROR, @@ -6431,6 +6450,7 @@ endjob: vm = NULL; cleanup: + virObjectUnref(caps); virDomainDefFree(vmdef); if (dev != dev_copy) virDomainDeviceDefFree(dev_copy); @@ -12388,6 +12408,7 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn, bool monJSON = false; pid_t pid = pid_value; char *pidfile = NULL; + qemuCapsPtr caps = NULL; virCheckFlags(0, NULL); @@ -12417,13 +12438,16 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn, goto cleanup; } + if (!(caps = qemuCapsCacheLookup(driver->capsCache, def->emulator))) + goto cleanup; + if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0) goto cleanup; if (qemudCanonicalizeMachine(driver, def) < 0) goto cleanup; - if (qemuDomainAssignAddresses(def, NULL, NULL) < 0) + if (qemuDomainAssignAddresses(def, caps, NULL) < 0) goto cleanup; if (!(vm = virDomainAssignDef(driver->caps, @@ -12455,6 +12479,7 @@ endjob: cleanup: virDomainDefFree(def); + virObjectUnref(caps); virDomainChrSourceDefFree(monConfig); if (vm) virDomainObjUnlock(vm); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5ac1d2b..bb56611 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3164,10 +3164,8 @@ qemuProcessReconnect(void *opaque) * caps in the domain status, so re-query them */ if (!priv->caps && - qemuCapsExtractVersionInfo(obj->def->emulator, obj->def->os.arch, - false, - NULL, - &priv->caps) < 0) + !(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache, + obj->def->emulator))) goto error; /* In case the domain shutdown while we were not running, @@ -3564,11 +3562,8 @@ int qemuProcessStart(virConnectPtr conn, VIR_DEBUG("Determining emulator version"); virObjectUnref(priv->caps); - priv->caps = NULL; - if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch, - true, - NULL, - &priv->caps) < 0) + if (!(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache, + vm->def->emulator))) goto cleanup; if (qemuAssignDeviceAliases(vm->def, priv->caps) < 0) @@ -4334,12 +4329,8 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, VIR_DEBUG("Determining emulator version"); virObjectUnref(priv->caps); - priv->caps = NULL; - if (qemuCapsExtractVersionInfo(vm->def->emulator, - vm->def->os.arch, - false, - NULL, - &priv->caps) < 0) + if (!(priv->caps = qemuCapsCacheLookupCopy(driver->capsCache, + vm->def->emulator))) goto cleanup; VIR_DEBUG("Preparing monitor state"); diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 468014c..0ab1e54 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -157,10 +157,6 @@ static int testCompareXMLToArgvFiles(const char *xml, VIR_FREE(log); virResetLastError(); - /* We do not call qemuCapsExtractVersionInfo() before calling - * qemuBuildCommandLine(), so we should set QEMU_CAPS_PCI_MULTIBUS for - * x86_64 and i686 architectures here. - */ if (STREQLEN(vmdef->os.arch, "x86_64", 6) || STREQLEN(vmdef->os.arch, "i686", 4)) { qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS); diff --git a/tests/qemuxmlnstest.c b/tests/qemuxmlnstest.c index 43b5fe6..dd56091 100644 --- a/tests/qemuxmlnstest.c +++ b/tests/qemuxmlnstest.c @@ -102,10 +102,6 @@ static int testCompareXMLToArgvFiles(const char *xml, VIR_FREE(log); virResetLastError(); - /* We do not call qemuCapsExtractVersionInfo() before calling - * qemuBuildCommandLine(), so we should set QEMU_CAPS_PCI_MULTIBUS for - * x86_64 and i686 architectures here. - */ if (STREQLEN(vmdef->os.arch, "x86_64", 6) || STREQLEN(vmdef->os.arch, "i686", 4)) { qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS); -- 1.7.11.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list