mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
qemu: command: add support for acpi-bridge-hotplug feature
This change adds backend qemu command line support for new libvirt global feature 'acpi-bridge-hotplug'. This option can be used as following: <feature> <pci> <acpi-bridge-hotplug state='off|on'/> </pci> </feature> The '<pci>' sub-element under '<feature>' is also newly introduced. 'acpi-bridge-hotplug' turns on the following command line option to qemu for x86 guests: (pc): -global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=<off|on> (q35): -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=<off|on> This change also adds the required qemuxml2argv unit tests in order to test correct qemu arguments. Unit tests have also been added to test qemu capability validation checks as well as checks for using this option with the right architecture. Signed-off-by: Ani Sinha <ani@anisinha.ca> Reviewed-by: Laine Stump <laine@redhat.com>
This commit is contained in:
parent
7300ccc9b3
commit
bef0f0d8be
@ -6102,6 +6102,7 @@ qemuBuildPMCommandLine(virCommand *cmd,
|
||||
qemuDomainObjPrivate *priv)
|
||||
{
|
||||
virQEMUCaps *qemuCaps = priv->qemuCaps;
|
||||
int acpihp_br = def->pci_features[VIR_DOMAIN_PCI_ACPI_BRIDGE_HOTPLUG];
|
||||
|
||||
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)) {
|
||||
/* with new qemu we always want '-no-shutdown' on startup and we set
|
||||
@ -6147,6 +6148,25 @@ qemuBuildPMCommandLine(virCommand *cmd,
|
||||
pm_object, def->pm.s4 == VIR_TRISTATE_BOOL_NO);
|
||||
}
|
||||
|
||||
if (acpihp_br != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
const char *pm_object = NULL;
|
||||
|
||||
if (!qemuDomainIsQ35(def) &&
|
||||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX4_ACPI_HOTPLUG_BRIDGE))
|
||||
pm_object = "PIIX4_PM";
|
||||
|
||||
if (qemuDomainIsQ35(def) &&
|
||||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_ICH9_ACPI_HOTPLUG_BRIDGE))
|
||||
pm_object = "ICH9-LPC";
|
||||
|
||||
if (pm_object != NULL) {
|
||||
virCommandAddArg(cmd, "-global");
|
||||
virCommandAddArgFormat(cmd, "%s.acpi-pci-hotplug-with-bridge-support=%s",
|
||||
pm_object,
|
||||
virTristateSwitchTypeToString(acpihp_br));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
unsupported configuration: acpi-bridge-hotplug is not available for architecture 'aarch64'
|
@ -0,0 +1,31 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/tmp/lib/domain--1-i440fx \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
XDG_DATA_HOME=/tmp/lib/domain--1-i440fx/.local/share \
|
||||
XDG_CACHE_HOME=/tmp/lib/domain--1-i440fx/.cache \
|
||||
XDG_CONFIG_HOME=/tmp/lib/domain--1-i440fx/.config \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-x86_64 \
|
||||
-name guest=i440fx,debug-threads=on \
|
||||
-S \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-i440fx/master-key.aes \
|
||||
-machine pc-i440fx-2.5,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid 56f5055c-1b8d-490c-844a-ad646a1caaaa \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-i440fx/monitor.sock,server=on,wait=off \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-no-acpi \
|
||||
-global PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off \
|
||||
-boot strict=on \
|
||||
-usb \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
|
||||
-msg timestamp=on
|
@ -0,0 +1 @@
|
||||
unsupported configuration: acpi-bridge-hotplug is not available with this QEMU binary
|
33
tests/qemuxml2argvdata/q35-acpi-hotplug-bridge-disable.args
Normal file
33
tests/qemuxml2argvdata/q35-acpi-hotplug-bridge-disable.args
Normal file
@ -0,0 +1,33 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/tmp/lib/domain--1-q35 \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
XDG_DATA_HOME=/tmp/lib/domain--1-q35/.local/share \
|
||||
XDG_CACHE_HOME=/tmp/lib/domain--1-q35/.cache \
|
||||
XDG_CONFIG_HOME=/tmp/lib/domain--1-q35/.config \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-x86_64 \
|
||||
-name guest=q35,debug-threads=on \
|
||||
-S \
|
||||
-object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-q35/master-key.aes \
|
||||
-machine pc-q35-2.5,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 1024 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid 56f5055c-1b8d-490c-844a-ad646a1caaaa \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-q35/monitor.sock,server=on,wait=off \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-no-acpi \
|
||||
-global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off \
|
||||
-boot strict=on \
|
||||
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \
|
||||
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \
|
||||
-device ioh3420,port=0x8,chassis=3,id=pci.3,bus=pcie.0,addr=0x1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x1 \
|
||||
-msg timestamp=on
|
@ -0,0 +1 @@
|
||||
unsupported configuration: acpi-bridge-hotplug is not available with this QEMU binary
|
@ -2562,6 +2562,22 @@ mymain(void)
|
||||
DO_TEST("pc-i440fx-acpi-root-hotplug-disable",
|
||||
QEMU_CAPS_PIIX4_ACPI_ROOT_PCI_HOTPLUG);
|
||||
DO_TEST_PARSE_ERROR_NOCAPS("pc-i440fx-acpi-root-hotplug-disable");
|
||||
DO_TEST("q35-acpi-hotplug-bridge-disable",
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_IOH3420,
|
||||
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
|
||||
QEMU_CAPS_ICH9_ACPI_HOTPLUG_BRIDGE);
|
||||
DO_TEST("pc-i440fx-acpi-hotplug-bridge-disable",
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_IOH3420,
|
||||
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
||||
QEMU_CAPS_PIIX4_ACPI_HOTPLUG_BRIDGE);
|
||||
DO_TEST_PARSE_ERROR_NOCAPS("q35-acpi-hotplug-bridge-disable");
|
||||
DO_TEST_PARSE_ERROR_NOCAPS("pc-i440fx-acpi-hotplug-bridge-disable");
|
||||
/* verify that we fail when acpi-bridge-hotplug option is specified for
|
||||
* archs other than x86
|
||||
*/
|
||||
DO_TEST_PARSE_ERROR_NOCAPS("aarch64-acpi-hotplug-bridge-disable");
|
||||
DO_TEST("q35-usb2",
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
||||
|
Loading…
Reference in New Issue
Block a user