Revert "conf: introduce support for acpi-bridge-hotplug feature"

This reverts commit 7300ccc9b3.

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Ani Sinha <ani@anisinha.ca>
This commit is contained in:
Laine Stump 2021-10-21 12:24:59 -04:00
parent 26e8eda46e
commit dba9893831
15 changed files with 1 additions and 398 deletions

View File

@ -1847,9 +1847,6 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
<e820_host state='on'/>
<passthrough state='on' mode='share_pt'/>
</xen>
<pci>
<acpi-bridge-hotplug state="on"/>
</pci>
<pvspinlock state='on'/>
<gic version='2'/>
<ioapic driver='qemu'/>
@ -1945,32 +1942,6 @@ are:
passthrough Enable IOMMU mappings allowing PCI passthrough on, off; mode - optional string sync_pt or share_pt :since:`6.3.0`
=========== ============================================== =================================================== ==============
``pci``
Various PCI bus related features of the hypervisor.
==================== ========================================================================================================= ======= ==============
Feature Description Value Since
==================== ========================================================================================================= ======= ==============
acpi-bridge-hotplug Enable ACPI based hotplug on the cold-plugged PCI bridges (pc) and pcie-root-ports (q35) (also see notes) on, off :since:`7.9.0`
==================== ========================================================================================================= ======= ==============
Note: pc machine types (i440fx) have ACPI hotplug enabled by
default on cold plugged bridges (bridges that were present in the
VM's domain definition before it was started). Disabling ACPI
hotplug leaves only SHPC hotplug enabled; many OSes don't
support SHPC hotplug, so this may have the effect of completely
disabling hotplug.
On q35 machinetypes earlier than pc-q35-6.1 (regardless of the QEMU
binary version), ACPI hotplug for cold plugged bridges is disabled
by default, and native PCIe hotplug is enabled instead. Enabling
ACPI hotplug will disable native PCIe hotplug.
Starting with the pc-q35-6.1 machinetype, ACPI hotplug is enabled
on cold plugged bridges by default while native PCIe hotplug is
disabled. In this case, disabling ACPI hotplug will re-enable PCIe
native hotplug.
``pmu``
Depending on the ``state`` attribute (values ``on``, ``off``, default ``on``)
enable or disable the performance monitoring unit for the guest.

View File

@ -6169,9 +6169,6 @@
<optional>
<ref name="ioapic"/>
</optional>
<optional>
<ref name="pci"/>
</optional>
<optional>
<ref name="hpt"/>
</optional>
@ -6403,18 +6400,6 @@
</element>
</define>
<define name="pci">
<element name="pci">
<interleave>
<optional>
<element name="acpi-bridge-hotplug">
<ref name="featurestate"/>
</element>
</optional>
</interleave>
</element>
</define>
<define name="ioapic">
<element name="ioapic">
<attribute name="driver">

View File

@ -172,7 +172,6 @@ VIR_ENUM_IMPL(virDomainFeature,
"cfpc",
"sbbc",
"ibs",
"pci",
);
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,
@ -213,11 +212,6 @@ VIR_ENUM_IMPL(virDomainXen,
"passthrough",
);
VIR_ENUM_IMPL(virDomainPCI,
VIR_DOMAIN_PCI_LAST,
"acpi-bridge-hotplug",
);
VIR_ENUM_IMPL(virDomainXenPassthroughMode,
VIR_DOMAIN_XEN_PASSTHROUGH_MODE_LAST,
"default",
@ -17564,36 +17558,6 @@ virDomainFeaturesKVMDefParse(virDomainDef *def,
return 0;
}
static int
virDomainFeaturesPCIDefParse(virDomainDef *def,
xmlNodePtr node)
{
def->features[VIR_DOMAIN_FEATURE_PCI] = VIR_TRISTATE_SWITCH_ON;
node = xmlFirstElementChild(node);
while (node) {
int feature;
virTristateSwitch value;
feature = virDomainPCITypeFromString((const char *)node->name);
if (feature < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported PCI feature: %s"),
node->name);
return -1;
}
if (virXMLPropTristateSwitch(node, "state", VIR_XML_PROP_REQUIRED,
&value) < 0)
return -1;
def->pci_features[feature] = value;
node = xmlNextElementSibling(node);
}
return 0;
}
static int
virDomainFeaturesXENDefParse(virDomainDef *def,
@ -17893,10 +17857,6 @@ virDomainFeaturesDefParse(virDomainDef *def,
break;
}
case VIR_DOMAIN_FEATURE_PCI:
if (virDomainFeaturesPCIDefParse(def, nodes[i]) < 0)
return -1;
case VIR_DOMAIN_FEATURE_LAST:
break;
}
@ -17905,6 +17865,7 @@ virDomainFeaturesDefParse(virDomainDef *def,
return 0;
}
static int
virDomainDefMaybeAddHostdevSCSIcontroller(virDomainDef *def)
{
@ -21590,7 +21551,6 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
case VIR_DOMAIN_FEATURE_HTM:
case VIR_DOMAIN_FEATURE_NESTED_HV:
case VIR_DOMAIN_FEATURE_CCF_ASSIST:
case VIR_DOMAIN_FEATURE_PCI:
if (src->features[i] != dst->features[i]) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("State of feature '%s' differs: "
@ -21847,29 +21807,6 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
}
}
/* pci */
if (src->features[VIR_DOMAIN_FEATURE_PCI] == VIR_TRISTATE_SWITCH_ON) {
for (i = 0; i < VIR_DOMAIN_PCI_LAST; i++) {
switch ((virDomainPCI) i) {
case VIR_DOMAIN_PCI_ACPI_BRIDGE_HOTPLUG:
if (src->pci_features[i] != dst->pci_features[i]) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("State of PCI feature '%s' differs: "
"source: '%s', destination: '%s'"),
virDomainPCITypeToString(i),
virTristateSwitchTypeToString(src->pci_features[i]),
virTristateSwitchTypeToString(dst->pci_features[i]));
return false;
}
break;
case VIR_DOMAIN_PCI_LAST:
break;
}
}
}
/* smm */
if (src->features[VIR_DOMAIN_FEATURE_SMM] == VIR_TRISTATE_SWITCH_ON) {
if (src->tseg_specified != dst->tseg_specified) {
@ -28025,30 +27962,6 @@ virDomainDefFormatFeatures(virBuffer *buf,
virDomainIBSTypeToString(def->features[i]));
break;
case VIR_DOMAIN_FEATURE_PCI:
if (def->features[i] != VIR_TRISTATE_SWITCH_ON)
break;
virBufferAddLit(&childBuf, "<pci>\n");
virBufferAdjustIndent(&childBuf, 2);
for (j = 0; j < VIR_DOMAIN_PCI_LAST; j++) {
switch ((virDomainPCI) j) {
case VIR_DOMAIN_PCI_ACPI_BRIDGE_HOTPLUG:
if (def->pci_features[j] != VIR_TRISTATE_SWITCH_ABSENT)
virBufferAsprintf(&childBuf, "<%s state='%s'/>\n",
virDomainPCITypeToString(j),
virTristateSwitchTypeToString(
def->pci_features[j]));
break;
case VIR_DOMAIN_PCI_LAST:
break;
}
}
virBufferAdjustIndent(&childBuf, -2);
virBufferAddLit(&childBuf, "</pci>\n");
break;
case VIR_DOMAIN_FEATURE_LAST:
break;
}

View File

@ -2044,7 +2044,6 @@ typedef enum {
VIR_DOMAIN_FEATURE_CFPC,
VIR_DOMAIN_FEATURE_SBBC,
VIR_DOMAIN_FEATURE_IBS,
VIR_DOMAIN_FEATURE_PCI,
VIR_DOMAIN_FEATURE_LAST
} virDomainFeature;
@ -2070,12 +2069,6 @@ typedef enum {
VIR_DOMAIN_HYPERV_LAST
} virDomainHyperv;
typedef enum {
VIR_DOMAIN_PCI_ACPI_BRIDGE_HOTPLUG = 0,
VIR_DOMAIN_PCI_LAST
} virDomainPCI;
typedef enum {
VIR_DOMAIN_KVM_HIDDEN = 0,
VIR_DOMAIN_KVM_DEDICATED,
@ -2809,7 +2802,6 @@ struct _virDomainDef {
int features[VIR_DOMAIN_FEATURE_LAST];
int caps_features[VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST];
int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
int pci_features[VIR_DOMAIN_PCI_LAST];
int kvm_features[VIR_DOMAIN_KVM_LAST];
int msrs_features[VIR_DOMAIN_MSRS_LAST];
int xen_features[VIR_DOMAIN_XEN_LAST];
@ -3939,7 +3931,6 @@ VIR_ENUM_DECL(virDomainGraphicsSpiceStreamingMode);
VIR_ENUM_DECL(virDomainGraphicsSpiceMouseMode);
VIR_ENUM_DECL(virDomainGraphicsVNCSharePolicy);
VIR_ENUM_DECL(virDomainHyperv);
VIR_ENUM_DECL(virDomainPCI);
VIR_ENUM_DECL(virDomainKVM);
VIR_ENUM_DECL(virDomainXen);
VIR_ENUM_DECL(virDomainXenPassthroughMode);

View File

@ -173,48 +173,6 @@ qemuValidateDomainDefPSeriesFeature(const virDomainDef *def,
return 0;
}
static int
qemuValidateDomainDefPCIFeature(const virDomainDef *def,
virQEMUCaps *qemuCaps,
int feature)
{
size_t i;
bool q35Dom = qemuDomainIsQ35(def);
bool q35cap = q35Dom && virQEMUCapsGet(qemuCaps,
QEMU_CAPS_ICH9_ACPI_HOTPLUG_BRIDGE);
if (def->features[feature] == VIR_TRISTATE_SWITCH_ABSENT)
return 0;
for (i = 0; i < VIR_DOMAIN_PCI_LAST; i++) {
if (def->pci_features[i] == VIR_TRISTATE_SWITCH_ABSENT)
continue;
switch ((virDomainPCI) i) {
case VIR_DOMAIN_PCI_ACPI_BRIDGE_HOTPLUG:
if (!ARCH_IS_X86(def->os.arch)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("acpi-bridge-hotplug is not available "
"for architecture '%s'"),
virArchToString(def->os.arch));
return -1;
}
if (!q35cap &&
!virQEMUCapsGet(qemuCaps,
QEMU_CAPS_PIIX4_ACPI_HOTPLUG_BRIDGE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("acpi-bridge-hotplug is not available "
"with this QEMU binary"));
return -1;
}
break;
case VIR_DOMAIN_PCI_LAST:
break;
}
}
return 0;
}
static int
qemuValidateDomainDefFeatures(const virDomainDef *def,
@ -336,10 +294,6 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
}
break;
case VIR_DOMAIN_FEATURE_PCI:
if (qemuValidateDomainDefPCIFeature(def, qemuCaps, i) < 0)
return -1;
break;
case VIR_DOMAIN_FEATURE_SMM:
case VIR_DOMAIN_FEATURE_KVM:
case VIR_DOMAIN_FEATURE_XEN:

View File

@ -1,33 +0,0 @@
<domain type='qemu'>
<name>i440fx</name>
<uuid>56f5055c-1b8d-490c-844a-ad646a1caaaa</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='aarch64' machine='virt'>hvm</type>
<boot dev='network'/>
</os>
<features>
<pci>
<acpi-bridge-hotplug state='off'/>
</pci>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1,33 +0,0 @@
<domain type='qemu'>
<name>i440fx</name>
<uuid>56f5055c-1b8d-490c-844a-ad646a1caaaa</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
<boot dev='network'/>
</os>
<features>
<pci>
<acpi-bridge-hotplug state='off'/>
</pci>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1,33 +0,0 @@
<domain type='qemu'>
<name>i440fx</name>
<uuid>56f5055c-1b8d-490c-844a-ad646a1caaaa</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
<boot dev='network'/>
</os>
<features>
<pci>
<acpi-bridge-hotplug state='on'/>
</pci>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1,47 +0,0 @@
<domain type='qemu'>
<name>q35</name>
<uuid>56f5055c-1b8d-490c-844a-ad646a1caaaa</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-q35-2.5'>hvm</type>
<boot dev='network'/>
</os>
<features>
<pci>
<acpi-bridge-hotplug state='off'/>
</pci>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
<model name='i82801b11-bridge'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
</controller>
<controller type='pci' index='2' model='pci-bridge'>
<model name='pci-bridge'/>
<target chassisNr='2'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='ioh3420'/>
<target chassis='3' port='0x8'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1,47 +0,0 @@
<domain type='qemu'>
<name>q35</name>
<uuid>56f5055c-1b8d-490c-844a-ad646a1caaaa</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-q35-2.5'>hvm</type>
<boot dev='network'/>
</os>
<features>
<pci>
<acpi-bridge-hotplug state='on'/>
</pci>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
<model name='i82801b11-bridge'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
</controller>
<controller type='pci' index='2' model='pci-bridge'>
<model name='pci-bridge'/>
<target chassisNr='2'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='ioh3420'/>
<target chassis='3' port='0x8'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1 +0,0 @@
../qemuxml2argvdata/pc-i440fx-acpi-hotplug-bridge-disable.xml

View File

@ -1 +0,0 @@
../qemuxml2argvdata/pc-i440fx-acpi-hotplug-bridge-enable.xml

View File

@ -1 +0,0 @@
../qemuxml2argvdata/q35-acpi-hotplug-bridge-disable.xml

View File

@ -1 +0,0 @@
../qemuxml2argvdata/q35-acpi-hotplug-bridge-enable.xml

View File

@ -427,20 +427,6 @@ mymain(void)
DO_TEST("misc-disable-s3", QEMU_CAPS_PIIX_DISABLE_S3);
DO_TEST_CAPS_LATEST("pc-i440fx-acpi-root-hotplug-disable");
DO_TEST_CAPS_LATEST("pc-i440fx-acpi-root-hotplug-enable");
DO_TEST("pc-i440fx-acpi-hotplug-bridge-disable",
QEMU_CAPS_PIIX4_ACPI_HOTPLUG_BRIDGE);
DO_TEST("pc-i440fx-acpi-hotplug-bridge-enable",
QEMU_CAPS_PIIX4_ACPI_HOTPLUG_BRIDGE);
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_ACPI_HOTPLUG_BRIDGE);
DO_TEST("q35-acpi-hotplug-bridge-enable",
QEMU_CAPS_DEVICE_PCI_BRIDGE,
QEMU_CAPS_DEVICE_IOH3420,
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
QEMU_CAPS_ICH9_ACPI_HOTPLUG_BRIDGE);
DO_TEST("misc-disable-suspends",
QEMU_CAPS_PIIX_DISABLE_S3,
QEMU_CAPS_PIIX_DISABLE_S4);