mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Enable the capability bit for -no-kvm-pit-reinjection on x86 only
On architectures not supporting the Intel specific programmable interval timer, like e.g. S390, starting a domain with a clock definition containing a pit timer results in the error "Option no-kvm-pit-reinjection not supported for this target". By moving the capability enablement for -no-kvm-pit-reinjection from the InitQMPBasic section into the x86_64 and i686 only enablement section all other architectures are no longer automatically enabled. In addition architecture related capabilities enablements have refactored into a new architecture bound capabilities initialization function. Signed-off-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
This commit is contained in:
parent
e914dcfdaa
commit
bde1731613
@ -2378,13 +2378,48 @@ virQEMUCapsInitQMPBasic(virQEMUCapsPtr qemuCaps)
|
|||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_USER_CONFIG);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_USER_CONFIG);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NETDEV_BRIDGE);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NETDEV_BRIDGE);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_SECCOMP_SANDBOX);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_SECCOMP_SANDBOX);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
|
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_IPV6_MIGRATION);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_IPV6_MIGRATION);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_OPT);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_OPT);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Capabilities that are architecture depending
|
||||||
|
* initialized for QEMU.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
virQEMUCapsInitArchQMPBasic(virQEMUCapsPtr qemuCaps,
|
||||||
|
qemuMonitorPtr mon)
|
||||||
|
{
|
||||||
|
char *archstr = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!(archstr = qemuMonitorGetTargetArch(mon)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ((qemuCaps->arch = virQEMUCapsArchFromString(archstr)) == VIR_ARCH_NONE) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("Unknown QEMU arch %s"), archstr);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Currently only x86_64 and i686 support PCI-multibus,
|
||||||
|
* -no-acpi and -no-kvm-pit-reinjection.
|
||||||
|
*/
|
||||||
|
if (qemuCaps->arch == VIR_ARCH_X86_64 ||
|
||||||
|
qemuCaps->arch == VIR_ARCH_I686) {
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
VIR_FREE(archstr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
|
virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
|
||||||
@ -2402,7 +2437,6 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
|
|||||||
char *monarg = NULL;
|
char *monarg = NULL;
|
||||||
char *monpath = NULL;
|
char *monpath = NULL;
|
||||||
char *pidfile = NULL;
|
char *pidfile = NULL;
|
||||||
char *archstr;
|
|
||||||
pid_t pid = 0;
|
pid_t pid = 0;
|
||||||
virDomainObj vm;
|
virDomainObj vm;
|
||||||
|
|
||||||
@ -2515,28 +2549,13 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
|
|||||||
|
|
||||||
virQEMUCapsInitQMPBasic(qemuCaps);
|
virQEMUCapsInitQMPBasic(qemuCaps);
|
||||||
|
|
||||||
|
if (virQEMUCapsInitArchQMPBasic(qemuCaps, mon) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
/* USB option is supported v1.3.0 onwards */
|
/* USB option is supported v1.3.0 onwards */
|
||||||
if (qemuCaps->version >= 1003000)
|
if (qemuCaps->version >= 1003000)
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_USB_OPT);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_USB_OPT);
|
||||||
|
|
||||||
if (!(archstr = qemuMonitorGetTargetArch(mon)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if ((qemuCaps->arch = virQEMUCapsArchFromString(archstr)) == VIR_ARCH_NONE) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("Unknown QEMU arch %s"), archstr);
|
|
||||||
VIR_FREE(archstr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
VIR_FREE(archstr);
|
|
||||||
|
|
||||||
/* Currently only x86_64 and i686 support PCI-multibus and -no-acpi. */
|
|
||||||
if (qemuCaps->arch == VIR_ARCH_X86_64 ||
|
|
||||||
qemuCaps->arch == VIR_ARCH_I686) {
|
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_MULTIBUS);
|
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_ACPI);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0)
|
if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0)
|
if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user