[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 09/34] x86: pcihp: fix missing bridge AML when intermediate ro
From: |
Igor Mammedov |
Subject: |
[PATCH v2 09/34] x86: pcihp: fix missing bridge AML when intermediate root-port has 'hotplug=off' set |
Date: |
Thu, 2 Mar 2023 17:15:18 +0100 |
(I practice [1] hasn't broke anything since on hardware side we unset
hotplug_handler on such intermediate port => hotplug behind it has
never worked)
When deciding if bridge should be described, the original
condition was
cold_plugged_bridge && pcihp_bridge_en
which was replaced [1] by
bridge has ACPI_PCIHP_PROP_BSEL
the later however is not the same thing as the original
and flips to false if intermediate bridge has hotplug
turned off (root-port with 'hotplug=off' option).
Since we already in build_pci_bridge_aml(), the question
if it's bridge is answered. Use DeviceState::hotplugged
to make decision if bridge should describe its slots.
What's left out is pcihp_bridge_en, which tells us if
ACPI bridge hotplug is enabled.
With hotplug and non hotplug part now being mostly
separated, omitting this check will only lead to
colplugged bridges describe occupied slots in case
when ACPI bridge hotplug is disabled.
Which makes behavior consistent with occupied slots
on hostbridge.
Ex (pc/DSDT.hpbrroot diff):
...
Device (S20)
{
Name (_ADR, 0x00040000) // _ADR: Address
+ Device (S08)
+ {
+ Name (_ADR, 0x00010000) // _ADR: Address
+ }
+
+ Device (S10)
+ {
+ Name (_ADR, 0x00020000) // _ADR: Address
+ }
}
...
PS:
testing shows that above doesn't affect adversely guest OS
behavior: i.e. if ACPI bridge hotplug is enabled it's
expected behaviour, and with ACPI bridge hotplug is disabled
(a.k. native hotplug), it doesn't break slot enumeration
nor native hotplug. (tested with RHEL9.0 and WS2022).
1)
Fixes: 6c36ec46b0d ("pcihp: make bridge describe itself using
AcpiDevAmlIfClass:build_dev_aml")
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
hw/acpi/pci-bridge.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/acpi/pci-bridge.c b/hw/acpi/pci-bridge.c
index 5f3ee5157f..4fbf6da6ad 100644
--- a/hw/acpi/pci-bridge.c
+++ b/hw/acpi/pci-bridge.c
@@ -21,7 +21,7 @@ void build_pci_bridge_aml(AcpiDevAmlIf *adev, Aml *scope)
{
PCIBridge *br = PCI_BRIDGE(adev);
- if (object_property_find(OBJECT(&br->sec_bus), ACPI_PCIHP_PROP_BSEL)) {
+ if (!DEVICE(br)->hotplugged) {
build_append_pci_bus_devices(scope, pci_bridge_get_sec_bus(br));
}
}
--
2.39.1
- [PATCH v2 29/34] pci: move acpi-index uniqueness check to generic PCI device code, (continued)
- [PATCH v2 29/34] pci: move acpi-index uniqueness check to generic PCI device code, Igor Mammedov, 2023/03/02
- [PATCH v2 33/34] pcihp: move fields enabling hotplug into AcpiPciHpState, Igor Mammedov, 2023/03/02
- [PATCH v2 34/34] pcihp: add ACPI PCI hotplug specific is_hotpluggable_bus() callback, Igor Mammedov, 2023/03/02
- [PATCH v2 20/34] tests: acpi: add device with acpi-index on non-hotpluggble bus, Igor Mammedov, 2023/03/02
- [PATCH v2 07/34] x86: pcihp: fix missing PCNT callchain when intermediate root-port has 'hotplug=off' set, Igor Mammedov, 2023/03/02
- [PATCH v2 12/34] pci: fix 'hotplugglable' property behavior, Igor Mammedov, 2023/03/02
- [PATCH v2 16/34] tests: acpi: whitelist DSDT before adding EDSM method, Igor Mammedov, 2023/03/02
- [PATCH v2 02/34] tests: acpi: whitelist new q35.noacpihp test and pc.hpbrroot, Igor Mammedov, 2023/03/02
- [PATCH v2 08/34] tests: acpi: whitelist pc/DSDT.hpbrroot and pc/DSDT.hpbridge tests, Igor Mammedov, 2023/03/02
- [PATCH v2 05/34] tests: acpi: whitelist q35/DSDT.multi-bridge before extending testcase, Igor Mammedov, 2023/03/02
- [PATCH v2 09/34] x86: pcihp: fix missing bridge AML when intermediate root-port has 'hotplug=off' set,
Igor Mammedov <=
- [PATCH v2 17/34] acpi: pci: add EDSM method to DSDT, Igor Mammedov, 2023/03/02
- [PATCH v2 25/34] tests: acpi: update expected blobs, Igor Mammedov, 2023/03/02
- [PATCH v2 31/34] acpi: pci: move BSEL into build_append_pcihp_slots(), Igor Mammedov, 2023/03/02
- [PATCH v2 24/34] acpi: pci: describe all functions on populated slots, Igor Mammedov, 2023/03/02
- [PATCH v2 30/34] acpi: pci: drop BSEL usage when deciding that device isn't hotpluggable, Igor Mammedov, 2023/03/02
- [PATCH v2 32/34] acpi: pci: move out ACPI PCI hotplug generator from generic slot generator build_append_pci_bus_devices(), Igor Mammedov, 2023/03/02