mbox series

[v2,00/34] pci(pc/q35): acpi-index support on non-hotpluggable slots

Message ID 20230302161543.286002-1-imammedo@redhat.com (mailing list archive)
Headers show
Series pci(pc/q35): acpi-index support on non-hotpluggable slots | expand

Message

Igor Mammedov March 2, 2023, 4:15 p.m. UTC
Changelog:
  v2:
    * rebase on top mst's pull request
    * revert
        3aa50aa253 ("tests/qtest: Check for devices in bios-tables-test")
      which broke acpi tables test and rebuild due to skipping some tests
      even thought none of devices tests depend on weren't disabled
      that resulted in stale expected tables and merge conflicts.

Series extends acpi-index support to host-bridge(s) and bridges
with disabled hotplug (either explicitly or implicitly).
Whats new (it is still limited to 'pc' and 'q35' machines),
acpi-index now works for non-hotpluggable slots/nics:
 * q35: host-bridge
 * pc: host-bridge with disabled hotplug
       'PIIX4_PM.acpi-root-pci-hotplug=off'
 * non-hotpluggable multifunction nics
 * on non-hotpluggable slots with native hotplug (i.e. without ACPI PCI hotplug)
       PIIX4_PM.acpi-pci-hotplug-with-bridge-support=off
       ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off
     + pcie-root-port,hotplug=off | pci-bridge,shpc=off

where it doesn't work (and never will):
 * on hotplugged ports/bridges
 * on hotpluggable ports/bridges with native hotplug

1-12/34:  fixes for bugs or odd behavior
14-24/34: non-hotplug/multifunction acpi-index enabling
29-34/34: cleanups 
all of that is peppered by extra acpi tests or extensions to existing ones

Somewhat tested with RHEL9.0 and WS2022.

What's in queue:
 * PXB support 
 * microvm and arm/virt support
all of above only for non-hotpluggable slots as I don't really want to
pull there complicated APCI PCI hotplug.

gitlab tree: https://gitlab.com/imammedo/qemu/-/tree/acpi_index_non_hotplug_v2

Igor Mammedov (34):
  Revert "tests/qtest: Check for devices in bios-tables-test"
  tests: acpi: whitelist new q35.noacpihp test and pc.hpbrroot
  tests: acpi: add test_acpi_q35_tcg_no_acpi_hotplug test and extend
    test_acpi_piix4_no_acpi_pci_hotplug
  tests: acpi: update expected blobs
  tests: acpi: whitelist q35/DSDT.multi-bridge before extending testcase
  tests: acpi: extend multi-bridge case with case
    'root-port,id=HOHP,hotplug=off root-port,bus=NOHP'
  x86: pcihp: fix missing PCNT callchain when intermediate root-port has
    'hotplug=off' set
  tests: acpi: whitelist pc/DSDT.hpbrroot and pc/DSDT.hpbridge tests
  x86: pcihp: fix missing bridge AML when intermediate root-port has
    'hotplug=off' set
  tests: acpi: update expected blobs
  pcihp: piix4: do not redirect hotplug controller to piix4 when ACPI
    hotplug is disabled
  pci: fix 'hotplugglable' property behavior
  tests: acpi: whitelist DSDT blobs before isolating PCI _DSM func 0
    prolog
  pcihp: move PCI _DSM function 0 prolog into separate function
  tests: acpi: update expected blobs
  tests: acpi: whitelist DSDT before adding EDSM method
  acpi: pci: add EDSM method to DSDT
  tests: acpi: update expected blobs
  tests: acpi: whitelist DSDT before adding device with acpi-index to
    testcases
  tests: acpi: add device with acpi-index on non-hotpluggble bus
  acpi: pci: support acpi-index for non-hotpluggable devices
  tests: acpi: update expected blobs
  tests: acpi: whitelist DSDT before exposing non zero functions
  acpi: pci: describe all functions on populated slots
  tests: acpi: update expected blobs
  tests: acpi: whitelist DSDT before adding non-0 function device with
    acpi-index to testcases
  tests: acpi: add non zero function device with acpi-index on
    non-hotpluggble bus
  tests: acpi: update expected blobs
  pci: move acpi-index uniqueness check to generic PCI device code
  acpi: pci: drop BSEL usage when deciding that device isn't
    hotpluggable
  acpi: pci: move BSEL into build_append_pcihp_slots()
  acpi: pci: move out ACPI PCI hotplug generator from generic slot
    generator build_append_pci_bus_devices()
  pcihp: move fields enabling hotplug into AcpiPciHpState
  pcihp: add ACPI PCI hotplug specific is_hotpluggable_bus() callback

 include/hw/acpi/ich9.h                        |   1 +
 include/hw/acpi/pcihp.h                       |  11 +-
 include/hw/acpi/piix4.h                       |   2 -
 include/hw/hotplug.h                          |   2 +
 include/hw/qdev-core.h                        |  13 +-
 hw/acpi/acpi-pci-hotplug-stub.c               |   9 +-
 hw/acpi/ich9.c                                |  21 +-
 hw/acpi/pci-bridge.c                          |  14 +-
 hw/acpi/pcihp.c                               | 112 +++--------
 hw/acpi/piix4.c                               |  33 ++--
 hw/i386/acpi-build.c                          | 179 +++++++++++++-----
 hw/isa/lpc_ich9.c                             |   1 +
 hw/pci/pci.c                                  |  57 ++++++
 hw/pci/pcie_port.c                            |   8 +
 tests/data/acpi/pc/DSDT                       | Bin 6360 -> 6488 bytes
 tests/data/acpi/pc/DSDT.acpierst              | Bin 6283 -> 6411 bytes
 tests/data/acpi/pc/DSDT.acpihmat              | Bin 7685 -> 7813 bytes
 tests/data/acpi/pc/DSDT.bridge                | Bin 12487 -> 12615 bytes
 tests/data/acpi/pc/DSDT.cphp                  | Bin 6824 -> 6952 bytes
 tests/data/acpi/pc/DSDT.dimmpxm               | Bin 8014 -> 8142 bytes
 tests/data/acpi/pc/DSDT.hpbridge              | Bin 6289 -> 6451 bytes
 tests/data/acpi/pc/DSDT.hpbrroot              | Bin 3081 -> 3343 bytes
 tests/data/acpi/pc/DSDT.ipmikcs               | Bin 6432 -> 6560 bytes
 tests/data/acpi/pc/DSDT.memhp                 | Bin 7719 -> 7847 bytes
 tests/data/acpi/pc/DSDT.nohpet                | Bin 6218 -> 6346 bytes
 tests/data/acpi/pc/DSDT.numamem               | Bin 6366 -> 6494 bytes
 tests/data/acpi/pc/DSDT.roothp                | Bin 9745 -> 9873 bytes
 tests/data/acpi/q35/DSDT                      | Bin 8252 -> 8361 bytes
 tests/data/acpi/q35/DSDT.acpierst             | Bin 8269 -> 8378 bytes
 tests/data/acpi/q35/DSDT.acpihmat             | Bin 9577 -> 9686 bytes
 tests/data/acpi/q35/DSDT.acpihmat-noinitiator | Bin 8531 -> 8640 bytes
 tests/data/acpi/q35/DSDT.applesmc             | Bin 8298 -> 8407 bytes
 tests/data/acpi/q35/DSDT.bridge               | Bin 11481 -> 11590 bytes
 tests/data/acpi/q35/DSDT.core-count2          | Bin 32392 -> 32501 bytes
 tests/data/acpi/q35/DSDT.cphp                 | Bin 8716 -> 8825 bytes
 tests/data/acpi/q35/DSDT.cxl                  | Bin 9564 -> 9673 bytes
 tests/data/acpi/q35/DSDT.dimmpxm              | Bin 9906 -> 10015 bytes
 tests/data/acpi/q35/DSDT.ipmibt               | Bin 8327 -> 8436 bytes
 tests/data/acpi/q35/DSDT.ipmismbus            | Bin 8340 -> 8449 bytes
 tests/data/acpi/q35/DSDT.ivrs                 | Bin 8269 -> 8378 bytes
 tests/data/acpi/q35/DSDT.memhp                | Bin 9611 -> 9720 bytes
 tests/data/acpi/q35/DSDT.mmio64               | Bin 9382 -> 9491 bytes
 tests/data/acpi/q35/DSDT.multi-bridge         | Bin 12337 -> 12770 bytes
 tests/data/acpi/q35/DSDT.noacpihp             | Bin 0 -> 8248 bytes
 tests/data/acpi/q35/DSDT.nohpet               | Bin 8110 -> 8219 bytes
 tests/data/acpi/q35/DSDT.numamem              | Bin 8258 -> 8367 bytes
 tests/data/acpi/q35/DSDT.pvpanic-isa          | Bin 8353 -> 8462 bytes
 tests/data/acpi/q35/DSDT.tis.tpm12            | Bin 8858 -> 8967 bytes
 tests/data/acpi/q35/DSDT.tis.tpm2             | Bin 8884 -> 8993 bytes
 tests/data/acpi/q35/DSDT.viot                 | Bin 9361 -> 9470 bytes
 tests/data/acpi/q35/DSDT.xapic                | Bin 35615 -> 35724 bytes
 tests/qtest/bios-tables-test.c                | 125 +++++-------
 52 files changed, 345 insertions(+), 243 deletions(-)
 create mode 100644 tests/data/acpi/q35/DSDT.noacpihp