!virCapabilitiesAddGuestFeature(guest, "cpuselection", 1, 0))
goto error;
- if (qemuCapsExtractVersionInfo(binary, NULL, &qemuCmdFlags) < 0 ||
+ if (qemuCapsExtractVersionInfo(binary, info->arch, NULL, &qemuCmdFlags) < 0 ||
((qemuCmdFlags & QEMUD_CMD_FLAG_BOOTINDEX) &&
!virCapabilitiesAddGuestFeature(guest, "deviceboot", 1, 0)))
goto error;
return 0;
}
-int qemuCapsExtractVersionInfo(const char *qemu,
+int qemuCapsExtractVersionInfo(const char *qemu, const char *arch,
unsigned int *retversion,
unsigned long long *retflags)
{
&version, &is_kvm, &kvm_version) == -1)
goto cleanup;
+ /* Currently only x86_64 and i686 support PCI-multibus. */
+ if (STREQLEN(arch, "x86_64", 6) ||
+ STREQLEN(arch, "i686", 4)) {
+ flags |= QEMUD_CMD_FLAG_PCI_MULTIBUS;
+ }
+
/* qemuCapsExtractDeviceStr will only set additional flags if qemu
* understands the 0.13.0+ notion of "-device driver,". */
if ((flags & QEMUD_CMD_FLAG_DEVICE) &&
return -1;
}
- if (qemuCapsExtractVersionInfo(binary, version, NULL) < 0) {
+ if (qemuCapsExtractVersionInfo(binary, ut.machine, version, NULL) < 0) {
return -1;
}
int qemuCapsExtractVersion(virCapsPtr caps,
unsigned int *version);
-int qemuCapsExtractVersionInfo(const char *qemu,
+int qemuCapsExtractVersionInfo(const char *qemu, const char *arch,
unsigned int *version,
unsigned long long *qemuCmdFlags);
break;
}
- /* Currently only x86_64 and i686 support PCI-multibus. */
- if (STREQLEN(def->os.arch, "x86_64", 6) ||
- STREQLEN(def->os.arch, "i686", 4)) {
- qemuCmdFlags |= QEMUD_CMD_FLAG_PCI_MULTIBUS;
- }
-
cmd = virCommandNewArgList(emulator, "-S", NULL);
virCommandAddEnvPassCommon(cmd);
/* XXX we should be persisting the original flags in the XML
* not re-detecting them, since the binary may have changed
* since launch time */
- if (qemuCapsExtractVersionInfo(obj->def->emulator,
+ if (qemuCapsExtractVersionInfo(obj->def->emulator, obj->def->os.arch,
NULL,
&qemuCmdFlags) >= 0 &&
(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
unsigned long long qemuCmdFlags = 0;
qemuDomainPCIAddressSetPtr addrs = NULL;
- if (qemuCapsExtractVersionInfo(def->emulator,
+ if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto cleanup;
goto cleanup;
DEBUG0("Determining emulator version");
- if (qemuCapsExtractVersionInfo(vm->def->emulator,
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto cleanup;
def->graphics[i]->data.vnc.port = QEMU_VNC_PORT_MIN;
}
- if (qemuCapsExtractVersionInfo(def->emulator,
+ if (qemuCapsExtractVersionInfo(def->emulator, def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto cleanup;
if (dev == NULL)
goto endjob;
- if (qemuCapsExtractVersionInfo(vm->def->emulator,
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto endjob;
if (dev == NULL)
goto endjob;
- if (qemuCapsExtractVersionInfo(vm->def->emulator,
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto endjob;
if (dev == NULL)
goto endjob;
- if (qemuCapsExtractVersionInfo(vm->def->emulator,
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
NULL,
&qemuCmdFlags) < 0)
goto endjob;
unlink(unixfile);
/* check that this qemu version supports the interactive exec */
- if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) {
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
+ NULL, &qemuCmdFlags) < 0) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
_("Cannot determine QEMU argv syntax %s"),
vm->def->emulator);
}
/* check that this qemu version supports the unix migration */
- if (qemuCapsExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) {
+ if (qemuCapsExtractVersionInfo(vm->def->emulator, vm->def->os.arch,
+ NULL, &qemuCmdFlags) < 0) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
_("Cannot extract Qemu version from '%s'"),
vm->def->emulator);
free(virtTestLogContentAndReset());
virResetLastError();
+ /* We do not call qemuCapsExtractVersionInfo() before calling
+ * qemuBuildCommandLine(), so we should set QEMUD_CMD_FLAG_PCI_MULTIBUS for
+ * x86_64 and i686 architectures here.
+ */
+ if (STREQLEN(vmdef->os.arch, "x86_64", 6) ||
+ STREQLEN(vmdef->os.arch, "i686", 4)) {
+ flags |= QEMUD_CMD_FLAG_PCI_MULTIBUS;
+ }
+
if (!(cmd = qemuBuildCommandLine(conn, &driver,
vmdef, &monitor_chr, false, flags,
migrateFrom, migrateFd, NULL,