Message ID | 20230112140312.3096331-1-imammedo@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | x86: fixing and cleaning up ACPI PCI code part 3 | expand |
On Thu, 12 Jan 2023 15:02:32 +0100 Igor Mammedov <imammedo@redhat.com> wrote: ping, Michael can you take a look at this series and queue it if it looks acceptable to you. PS: I'm waiting on this being merged, to send acpi-index support on non-hotpluggable ports (due to heavy dependency on this refactoring). After which I plan to post series that allows resources reallocation on bridges. (both should be doable in 8.0 timeframe) (the rest: acpi-index for pxb and other targets/machines, pci-hostbridge cleanups will be after that but probably won't make into 8.0) > Series continues refactoring on top of [1]. > > It focuses on isolating creation of non hotplug and > hotplug slot descriptions. In state it's posted, it's > not complete, but pretty close to it. The series contains > stable patches from refactoring and is already too large > to keep it to myself, hence I'm publishing it fro review. > > It will be followed by separate series on top of this one, > that will finish concrete feature[s] in following order: > 1 introduce acpi-index support for non-hotpluggable PCI > devices (i.e. NICs directly attached to Q35 host-bridge) > making acpi-index support complete within pc/q35 machines. > 2 let guest OS to re-arrange bridge resources when ACPI PCI > hotplug is enabled. (should fix insuficient resources issue > during PCI hotplug) > 3 finish isolating hotplug code from non-hotplug one, > which should allow to re-use non-hotplug parts in other > machines (arm/virt and microvm) and bring acpi-index > support there. > > PS: > Refactoring also adds testing for various corner cases > and fixes (present/latent/imagined) bugs where they were > spotted. > > 1) "[PATCH 00/11] x86: clean up ACPI PCI code part 2" > https://www.mail-archive.com/qemu-devel@nongnu.org/msg915493.html > > CC: "Michael S. Tsirkin" <mst@redhat.com> > CC: Ani Sinha <ani@anisinha.ca> > > Igor Mammedov (40): > tests: qtest: print device_add error before failing test > tests: acpi: cleanup arguments to make them more readable > tests: acpi: whitelist DSDT blobs for tests that use pci-bridges > tests: acpi: extend pcihp with nested bridges > tests: acpi: update expected blobs > tests: acpi: cleanup use_uefi argument usage > pci_bridge: remove whitespace > x86: acpi: pcihp: clean up duplicate bridge_in_acpi assignment > pci: acpi hotplug: rename x-native-hotplug to > x-do-not-expose-native-hotplug-cap > pcihp: piix4: do not call acpi_pcihp_reset() when ACPI PCI hotplug is > disabled > pci: acpihp: assign BSEL only to coldplugged bridges > x86: pcihp: fix invalid AML PCNT calls to hotplugged bridges > tests: boot_sector_test: avoid crashing if status is not available yet > tests: acpi: extend bridge tests with hotplugged bridges > tests: boot_sector_test(): make it multi-shot > tests: acpi: add reboot cycle to bridge test > tests: acpi: whitelist DSDT before refactoring acpi based PCI hotplug > machinery > pcihp: drop pcihp_bridge_en dependency when composing PCNT method > tests: acpi: update expected blobs > tests: acpi: whitelist DSDT before refactoring acpi based PCI hotplug > machinery > pcihp: compose PCNT callchain right before its user _GPE._E01 > pcihp: do not put empty PCNT in DSDT > tests: acpi: update expected blobs > whitelist DSDT before adding endpoint devices to bridge testcases > tests: acpi: add endpoint devices to bridges > tests: acpi: update expected blobs > x86: pcihp: acpi: prepare slot ignore rule to work with self > describing bridges > pci: acpi: wire up AcpiDevAmlIf interface to generic bridge > pcihp: make bridge describe itself using > AcpiDevAmlIfClass:build_dev_aml > pci: make sure pci_bus_is_express() won't error out with "discards > ‘const’ qualifier" > pcihp: isolate rule whether slot should be described in DSDT > tests: acpi: whitelist DSDT before decoupling PCI hotplug code from > basic slots description > pcihp: acpi: decouple hotplug and generic slots description > tests: acpi: update expected blobs > tests: acpi: whitelist DSDT blobs before removing dynamic _DSM on > coldplugged bridges > pcihp: acpi: ignore coldplugged bridges when composing hotpluggable > slots > tests: acpi: update expected blobs > tests: acpi: whitelist DSDT before moving non-hotpluggble slots > description from hotplug path > pcihp: generate populated non-hotpluggble slot descriptions on > non-hotplug path > tests: acpi: update expected blobs > > include/hw/acpi/pci.h | 4 + > include/hw/pci/pci.h | 2 +- > include/hw/pci/pcie_port.h | 3 +- > hw/acpi/Kconfig | 4 + > hw/acpi/meson.build | 4 +- > hw/acpi/pci-bridge-stub.c | 20 ++ > hw/acpi/pci-bridge.c | 27 ++ > hw/acpi/pcihp.c | 35 ++- > hw/acpi/piix4.c | 4 +- > hw/i386/Kconfig | 1 + > hw/i386/acpi-build.c | 279 ++++++++++-------- > hw/i386/pc_q35.c | 5 +- > hw/pci-bridge/gen_pcie_root_port.c | 7 +- > hw/pci-bridge/pci_bridge_dev.c | 1 - > hw/pci/pci.c | 2 +- > hw/pci/pci_bridge.c | 14 + > hw/pci/pcie.c | 6 +- > hw/pci/pcie_port.c | 3 +- > tests/data/acpi/pc/DSDT | Bin 6458 -> 6360 bytes > tests/data/acpi/pc/DSDT.acpierst | Bin 6418 -> 6283 bytes > tests/data/acpi/pc/DSDT.acpihmat | Bin 7783 -> 7685 bytes > tests/data/acpi/pc/DSDT.bridge | Bin 9532 -> 12487 bytes > tests/data/acpi/pc/DSDT.cphp | Bin 6922 -> 6824 bytes > tests/data/acpi/pc/DSDT.dimmpxm | Bin 8112 -> 8014 bytes > tests/data/acpi/pc/DSDT.hpbridge | Bin 6418 -> 6289 bytes > tests/data/acpi/pc/DSDT.hpbrroot | Bin 3064 -> 3081 bytes > tests/data/acpi/pc/DSDT.ipmikcs | Bin 6530 -> 6432 bytes > tests/data/acpi/pc/DSDT.memhp | Bin 7817 -> 7719 bytes > tests/data/acpi/pc/DSDT.nohpet | Bin 6316 -> 6218 bytes > tests/data/acpi/pc/DSDT.numamem | Bin 6464 -> 6366 bytes > tests/data/acpi/pc/DSDT.roothp | Bin 6656 -> 9745 bytes > tests/data/acpi/q35/DSDT | Bin 8310 -> 8252 bytes > tests/data/acpi/q35/DSDT.acpierst | Bin 8327 -> 8269 bytes > tests/data/acpi/q35/DSDT.acpihmat | Bin 9635 -> 9577 bytes > tests/data/acpi/q35/DSDT.acpihmat-noinitiator | Bin 8589 -> 8531 bytes > tests/data/acpi/q35/DSDT.applesmc | Bin 8356 -> 8298 bytes > tests/data/acpi/q35/DSDT.bridge | Bin 11439 -> 11481 bytes > tests/data/acpi/q35/DSDT.core-count2 | Bin 32450 -> 32392 bytes > tests/data/acpi/q35/DSDT.cphp | Bin 8774 -> 8716 bytes > tests/data/acpi/q35/DSDT.cxl | Bin 9636 -> 9578 bytes > tests/data/acpi/q35/DSDT.dimmpxm | Bin 9964 -> 9906 bytes > tests/data/acpi/q35/DSDT.ipmibt | Bin 8385 -> 8327 bytes > tests/data/acpi/q35/DSDT.ipmismbus | Bin 8398 -> 8340 bytes > tests/data/acpi/q35/DSDT.ivrs | Bin 8327 -> 8269 bytes > tests/data/acpi/q35/DSDT.memhp | Bin 9669 -> 9611 bytes > tests/data/acpi/q35/DSDT.mmio64 | Bin 9440 -> 9382 bytes > tests/data/acpi/q35/DSDT.multi-bridge | Bin 8630 -> 12337 bytes > tests/data/acpi/q35/DSDT.nohpet | Bin 8168 -> 8110 bytes > tests/data/acpi/q35/DSDT.numamem | Bin 8316 -> 8258 bytes > tests/data/acpi/q35/DSDT.pvpanic-isa | Bin 8411 -> 8353 bytes > tests/data/acpi/q35/DSDT.tis.tpm12 | Bin 8916 -> 8858 bytes > tests/data/acpi/q35/DSDT.tis.tpm2 | Bin 8942 -> 8884 bytes > tests/data/acpi/q35/DSDT.viot | Bin 9419 -> 9361 bytes > tests/data/acpi/q35/DSDT.xapic | Bin 35673 -> 35615 bytes > tests/qtest/bios-tables-test.c | 144 ++++++--- > tests/qtest/boot-sector.c | 6 +- > tests/qtest/libqtest.c | 4 + > 57 files changed, 394 insertions(+), 181 deletions(-) > create mode 100644 hw/acpi/pci-bridge-stub.c > create mode 100644 hw/acpi/pci-bridge.c >
On Wed, Jan 25, 2023 at 06:02:09PM +0100, Igor Mammedov wrote: > On Thu, 12 Jan 2023 15:02:32 +0100 > Igor Mammedov <imammedo@redhat.com> wrote: > > ping, > > Michael can you take a look at this series and queue it > if it looks acceptable to you. Yes it's tagged already. RSN. > > PS: > I'm waiting on this being merged, to send acpi-index > support on non-hotpluggable ports (due to heavy dependency > on this refactoring). After which I plan to post > series that allows resources reallocation on bridges. > (both should be doable in 8.0 timeframe) > > (the rest: acpi-index for pxb and other targets/machines, > pci-hostbridge cleanups will be after that but probably > won't make into 8.0) > > > Series continues refactoring on top of [1]. > > > > It focuses on isolating creation of non hotplug and > > hotplug slot descriptions. In state it's posted, it's > > not complete, but pretty close to it. The series contains > > stable patches from refactoring and is already too large > > to keep it to myself, hence I'm publishing it fro review. > > > > It will be followed by separate series on top of this one, > > that will finish concrete feature[s] in following order: > > 1 introduce acpi-index support for non-hotpluggable PCI > > devices (i.e. NICs directly attached to Q35 host-bridge) > > making acpi-index support complete within pc/q35 machines. > > 2 let guest OS to re-arrange bridge resources when ACPI PCI > > hotplug is enabled. (should fix insuficient resources issue > > during PCI hotplug) > > 3 finish isolating hotplug code from non-hotplug one, > > which should allow to re-use non-hotplug parts in other > > machines (arm/virt and microvm) and bring acpi-index > > support there. > > > > PS: > > Refactoring also adds testing for various corner cases > > and fixes (present/latent/imagined) bugs where they were > > spotted. > > > > 1) "[PATCH 00/11] x86: clean up ACPI PCI code part 2" > > https://www.mail-archive.com/qemu-devel@nongnu.org/msg915493.html > > > > CC: "Michael S. Tsirkin" <mst@redhat.com> > > CC: Ani Sinha <ani@anisinha.ca> > > > > Igor Mammedov (40): > > tests: qtest: print device_add error before failing test > > tests: acpi: cleanup arguments to make them more readable > > tests: acpi: whitelist DSDT blobs for tests that use pci-bridges > > tests: acpi: extend pcihp with nested bridges > > tests: acpi: update expected blobs > > tests: acpi: cleanup use_uefi argument usage > > pci_bridge: remove whitespace > > x86: acpi: pcihp: clean up duplicate bridge_in_acpi assignment > > pci: acpi hotplug: rename x-native-hotplug to > > x-do-not-expose-native-hotplug-cap > > pcihp: piix4: do not call acpi_pcihp_reset() when ACPI PCI hotplug is > > disabled > > pci: acpihp: assign BSEL only to coldplugged bridges > > x86: pcihp: fix invalid AML PCNT calls to hotplugged bridges > > tests: boot_sector_test: avoid crashing if status is not available yet > > tests: acpi: extend bridge tests with hotplugged bridges > > tests: boot_sector_test(): make it multi-shot > > tests: acpi: add reboot cycle to bridge test > > tests: acpi: whitelist DSDT before refactoring acpi based PCI hotplug > > machinery > > pcihp: drop pcihp_bridge_en dependency when composing PCNT method > > tests: acpi: update expected blobs > > tests: acpi: whitelist DSDT before refactoring acpi based PCI hotplug > > machinery > > pcihp: compose PCNT callchain right before its user _GPE._E01 > > pcihp: do not put empty PCNT in DSDT > > tests: acpi: update expected blobs > > whitelist DSDT before adding endpoint devices to bridge testcases > > tests: acpi: add endpoint devices to bridges > > tests: acpi: update expected blobs > > x86: pcihp: acpi: prepare slot ignore rule to work with self > > describing bridges > > pci: acpi: wire up AcpiDevAmlIf interface to generic bridge > > pcihp: make bridge describe itself using > > AcpiDevAmlIfClass:build_dev_aml > > pci: make sure pci_bus_is_express() won't error out with "discards > > ‘const’ qualifier" > > pcihp: isolate rule whether slot should be described in DSDT > > tests: acpi: whitelist DSDT before decoupling PCI hotplug code from > > basic slots description > > pcihp: acpi: decouple hotplug and generic slots description > > tests: acpi: update expected blobs > > tests: acpi: whitelist DSDT blobs before removing dynamic _DSM on > > coldplugged bridges > > pcihp: acpi: ignore coldplugged bridges when composing hotpluggable > > slots > > tests: acpi: update expected blobs > > tests: acpi: whitelist DSDT before moving non-hotpluggble slots > > description from hotplug path > > pcihp: generate populated non-hotpluggble slot descriptions on > > non-hotplug path > > tests: acpi: update expected blobs > > > > include/hw/acpi/pci.h | 4 + > > include/hw/pci/pci.h | 2 +- > > include/hw/pci/pcie_port.h | 3 +- > > hw/acpi/Kconfig | 4 + > > hw/acpi/meson.build | 4 +- > > hw/acpi/pci-bridge-stub.c | 20 ++ > > hw/acpi/pci-bridge.c | 27 ++ > > hw/acpi/pcihp.c | 35 ++- > > hw/acpi/piix4.c | 4 +- > > hw/i386/Kconfig | 1 + > > hw/i386/acpi-build.c | 279 ++++++++++-------- > > hw/i386/pc_q35.c | 5 +- > > hw/pci-bridge/gen_pcie_root_port.c | 7 +- > > hw/pci-bridge/pci_bridge_dev.c | 1 - > > hw/pci/pci.c | 2 +- > > hw/pci/pci_bridge.c | 14 + > > hw/pci/pcie.c | 6 +- > > hw/pci/pcie_port.c | 3 +- > > tests/data/acpi/pc/DSDT | Bin 6458 -> 6360 bytes > > tests/data/acpi/pc/DSDT.acpierst | Bin 6418 -> 6283 bytes > > tests/data/acpi/pc/DSDT.acpihmat | Bin 7783 -> 7685 bytes > > tests/data/acpi/pc/DSDT.bridge | Bin 9532 -> 12487 bytes > > tests/data/acpi/pc/DSDT.cphp | Bin 6922 -> 6824 bytes > > tests/data/acpi/pc/DSDT.dimmpxm | Bin 8112 -> 8014 bytes > > tests/data/acpi/pc/DSDT.hpbridge | Bin 6418 -> 6289 bytes > > tests/data/acpi/pc/DSDT.hpbrroot | Bin 3064 -> 3081 bytes > > tests/data/acpi/pc/DSDT.ipmikcs | Bin 6530 -> 6432 bytes > > tests/data/acpi/pc/DSDT.memhp | Bin 7817 -> 7719 bytes > > tests/data/acpi/pc/DSDT.nohpet | Bin 6316 -> 6218 bytes > > tests/data/acpi/pc/DSDT.numamem | Bin 6464 -> 6366 bytes > > tests/data/acpi/pc/DSDT.roothp | Bin 6656 -> 9745 bytes > > tests/data/acpi/q35/DSDT | Bin 8310 -> 8252 bytes > > tests/data/acpi/q35/DSDT.acpierst | Bin 8327 -> 8269 bytes > > tests/data/acpi/q35/DSDT.acpihmat | Bin 9635 -> 9577 bytes > > tests/data/acpi/q35/DSDT.acpihmat-noinitiator | Bin 8589 -> 8531 bytes > > tests/data/acpi/q35/DSDT.applesmc | Bin 8356 -> 8298 bytes > > tests/data/acpi/q35/DSDT.bridge | Bin 11439 -> 11481 bytes > > tests/data/acpi/q35/DSDT.core-count2 | Bin 32450 -> 32392 bytes > > tests/data/acpi/q35/DSDT.cphp | Bin 8774 -> 8716 bytes > > tests/data/acpi/q35/DSDT.cxl | Bin 9636 -> 9578 bytes > > tests/data/acpi/q35/DSDT.dimmpxm | Bin 9964 -> 9906 bytes > > tests/data/acpi/q35/DSDT.ipmibt | Bin 8385 -> 8327 bytes > > tests/data/acpi/q35/DSDT.ipmismbus | Bin 8398 -> 8340 bytes > > tests/data/acpi/q35/DSDT.ivrs | Bin 8327 -> 8269 bytes > > tests/data/acpi/q35/DSDT.memhp | Bin 9669 -> 9611 bytes > > tests/data/acpi/q35/DSDT.mmio64 | Bin 9440 -> 9382 bytes > > tests/data/acpi/q35/DSDT.multi-bridge | Bin 8630 -> 12337 bytes > > tests/data/acpi/q35/DSDT.nohpet | Bin 8168 -> 8110 bytes > > tests/data/acpi/q35/DSDT.numamem | Bin 8316 -> 8258 bytes > > tests/data/acpi/q35/DSDT.pvpanic-isa | Bin 8411 -> 8353 bytes > > tests/data/acpi/q35/DSDT.tis.tpm12 | Bin 8916 -> 8858 bytes > > tests/data/acpi/q35/DSDT.tis.tpm2 | Bin 8942 -> 8884 bytes > > tests/data/acpi/q35/DSDT.viot | Bin 9419 -> 9361 bytes > > tests/data/acpi/q35/DSDT.xapic | Bin 35673 -> 35615 bytes > > tests/qtest/bios-tables-test.c | 144 ++++++--- > > tests/qtest/boot-sector.c | 6 +- > > tests/qtest/libqtest.c | 4 + > > 57 files changed, 394 insertions(+), 181 deletions(-) > > create mode 100644 hw/acpi/pci-bridge-stub.c > > create mode 100644 hw/acpi/pci-bridge.c > >