[PATCH v5 00/36] ACPI PCI Hotplug support on ARM

Eric Auger posted 36 patches 4 months, 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250703123728.414386-1-eric.auger@redhat.com
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Aurelien Jarno <aurelien@aurel32.net>, Paolo Bonzini <pbonzini@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, Shannon Zhao <shannon.zhaosl@gmail.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Eduardo Habkost <eduardo@habkost.net>, Richard Henderson <richard.henderson@linaro.org>
There is a newer version of this series
hw/i386/acpi-build.h                          |   4 -
include/hw/acpi/generic_event_device.h        |  17 +-
include/hw/acpi/pci.h                         |   5 +-
include/hw/acpi/pcihp.h                       |  17 +-
include/hw/arm/virt.h                         |   1 +
include/hw/pci-host/gpex.h                    |   1 +
include/hw/sysbus.h                           |   1 +
hw/acpi/acpi-pci-hotplug-stub.c               |   2 +-
hw/acpi/generic_event_device.c                |  77 +++
hw/acpi/ich9.c                                |   7 +-
hw/acpi/pci-bridge.c                          |  54 ++
hw/acpi/pci.c                                 |  50 ++
hw/acpi/pcihp.c                               | 439 ++++++++++++++-
hw/acpi/piix4.c                               |   5 +-
hw/arm/virt-acpi-build.c                      |  38 ++
hw/arm/virt.c                                 |  27 +-
hw/core/sysbus.c                              |  11 +
hw/i386/acpi-build.c                          | 532 +-----------------
hw/pci-host/gpex-acpi.c                       |  74 +--
tests/qtest/bios-tables-test.c                |  53 ++
hw/arm/Kconfig                                |   2 +
hw/pci-host/Kconfig                           |   1 +
tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5293 bytes
.../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5379 bytes
tests/data/acpi/aarch64/virt/DSDT.acpipcihp   | Bin 0 -> 6202 bytes
.../acpi/aarch64/virt/DSDT.hpoffacpiindex     | Bin 0 -> 5347 bytes
tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6654 bytes
tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7768 bytes
tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5495 bytes
tests/data/acpi/aarch64/virt/DSDT.viot        | Bin 0 -> 5310 bytes
tests/data/acpi/riscv64/virt/DSDT             | Bin 3576 -> 3538 bytes
tests/data/acpi/x86/microvm/DSDT.pcie         | Bin 3023 -> 2985 bytes
32 files changed, 811 insertions(+), 607 deletions(-)
create mode 100644 tests/data/acpi/aarch64/virt/DSDT.acpipcihp
create mode 100644 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex
create mode 100644 tests/data/acpi/aarch64/virt/DSDT.viot
[PATCH v5 00/36] ACPI PCI Hotplug support on ARM
Posted by Eric Auger 4 months, 2 weeks ago
This series enables ACPI PCI hotplug/hotunplug on ARM.
It is not enabled by default and ACPI PCI hotplug can
be selected by setting:

-global acpi-ged.acpi-pci-hotplug-with-bridge-support=on

Expected benefits should be similar to those listed in [1],
ie. removal of some racy behaviors, improved latencies.

The infrastructure used in x86 is heavily reused and a
huge part of the series consists in moving code from
hw/i386/acpi-build.c to a generic place and slightly
adapting it to make it usable on ARM. The DSDT table is
augmented to support ACPI PCI hotplug elements.

On ARM we use use a GED event to notify the OS about
hotplug events.

Best Regards

Eric

This series can be found at:
https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v5

previous series:
https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v4

History:
v4 -> v5:
- Collected Jonathan's R-bs (many thanks!)
- fixed the tests/qtest/bios-tables-test issue by
  creating a variant for the viot test
- use the 3 phase reset API
- fixed qom-test failures that were due to unconditionnal
  fetches of the GED property

v3 -> v4:
- toook into account all comments on v3
- static acpi-index is now supported unconditionally
  from acpi pcihp option. See indiviual patches.
- I hit a problem with ref block generation at
  [19/32] tests/qtest/bios-tables-test: Update ARM DSDT reference
  blobs: despite I regenerate the blobs, I get some errors.

v2 -> v3:
- lot of changes taking into account various feedbacks
  (many thanks to all reviewers). Please refer to
  individual patches for details. Main changes:
  - no more machine option, acpi pci hp is not set by
    default.
  - removal of 2 unused variables in the osc method
  - introduction of GED property to set the bus
  - rework of the init/reset sequence
  - fix virtio-mem-pci hotplug regression

v1 -> v2:
- collected a bunch of R-bs from Gustavo (many thanks!)
- Fixed the breakage of bios-tables-test in TCG mode by
  incorporating Gustavo's patches (part of
  [PATCH 0/5] ACPI tests for PCI Hotplug on ARM
  https://lore.kernel.org/all/20250526053123.1434204-1-gustavo.romero@linaro.org/)
- Tweeked the dsdt aml changes to avoid any dsdt blob difference when
  acpi-pcihp is off.

RFC -> v1:
- First 3 trivial patches were pulled separately
- Fix of the register region size (0x18), ie. ACPI_PCIHP_SIZE
- addition of aml_pci_edsm which was not called in RFC
- acpi-index feature is now fixed. vms->bus was not set on
  acpi_pcihp_init. The init sequence is still hacky though. Suggestions
  are welcome.

[1] [PATCH v6 0/6] Use ACPI PCI hot-plug for Q35
https://lore.kernel.org/all/20210713004205.775386-1-jusual@redhat.com/


Eric Auger (32):
  hw/i386/acpi-build: Make aml_pci_device_dsm() static
  hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp
  hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to
    acpi_dsdt_add_pci_osc
  hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
  hw/acpi/ged: Add a acpi-pci-hotplug-with-bridge-support property
  hw/pci-host/gpex-acpi: Use GED acpi pcihp property
  hw/i386/acpi-build: Turn build_q35_osc_method into a generic method
  hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method
  tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change
  hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper
  hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug
  hw/i386/acpi-build: Move build_append_notification_callback to pcihp
  hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots to
    pcihp
  hw/i386/acpi-build: Use AcpiPciHpState::root in acpi_set_pci_info
  hw/i386/acpi-build: Move aml_pci_edsm to a generic place
  qtest/bios-tables-test: Prepare for fixing the aarch64 viot test
  qtest/bios-tables-test: Add a variant to the aarch64 viot test
  qtest/bios-tables-test: Generate DSDT.viot
  hw/arm/virt-acpi-build: Let non hotplug ports support static
    acpi-index
  tests/qtest/bios-tables-test: Update ARM DSDT reference blobs
  hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI
    hotplug
  hw/acpi/ged: Add a bus link property
  hw/arm/virt: Pass the bus on the ged creation
  hw/acpi/ged: Call pcihp plug callbacks in hotplug handler
    implementation
  hw/acpi/pcihp: Remove root arg in acpi_pcihp_init
  hw/acpi/ged: Prepare the device to react to PCI hotplug events
  hw/acpi/ged: Support migration of AcpiPciHpState
  hw/core/sysbus: Introduce sysbus_mmio_map_name() helper
  hw/arm/virt: Minor code reshuffling in create_acpi_ged
  hw/arm/virt: Let virt support pci hotplug/unplug GED event
  qtest/bios-tables-test: Generate reference blob for
    DSDT.hpoffacpiindex
  qtest/bios-tables-test: Generate reference blob for DSDT.acpipcihp

Gustavo Romero (4):
  tests/qtest/bios-tables-test: Prepare for changes in the DSDT table
  tests/qtest/bios-tables-test: Prepare for changes in the arm virt DSDT
    table
  tests/qtest/bios-tables-test: Prepare for addition of acpi pci hp
    tests
  tests/qtest/bios-tables-test: Add aarch64 ACPI PCI hotplug test

 hw/i386/acpi-build.h                          |   4 -
 include/hw/acpi/generic_event_device.h        |  17 +-
 include/hw/acpi/pci.h                         |   5 +-
 include/hw/acpi/pcihp.h                       |  17 +-
 include/hw/arm/virt.h                         |   1 +
 include/hw/pci-host/gpex.h                    |   1 +
 include/hw/sysbus.h                           |   1 +
 hw/acpi/acpi-pci-hotplug-stub.c               |   2 +-
 hw/acpi/generic_event_device.c                |  77 +++
 hw/acpi/ich9.c                                |   7 +-
 hw/acpi/pci-bridge.c                          |  54 ++
 hw/acpi/pci.c                                 |  50 ++
 hw/acpi/pcihp.c                               | 439 ++++++++++++++-
 hw/acpi/piix4.c                               |   5 +-
 hw/arm/virt-acpi-build.c                      |  38 ++
 hw/arm/virt.c                                 |  27 +-
 hw/core/sysbus.c                              |  11 +
 hw/i386/acpi-build.c                          | 532 +-----------------
 hw/pci-host/gpex-acpi.c                       |  74 +--
 tests/qtest/bios-tables-test.c                |  53 ++
 hw/arm/Kconfig                                |   2 +
 hw/pci-host/Kconfig                           |   1 +
 tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5293 bytes
 .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5379 bytes
 tests/data/acpi/aarch64/virt/DSDT.acpipcihp   | Bin 0 -> 6202 bytes
 .../acpi/aarch64/virt/DSDT.hpoffacpiindex     | Bin 0 -> 5347 bytes
 tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6654 bytes
 tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7768 bytes
 tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5495 bytes
 tests/data/acpi/aarch64/virt/DSDT.viot        | Bin 0 -> 5310 bytes
 tests/data/acpi/riscv64/virt/DSDT             | Bin 3576 -> 3538 bytes
 tests/data/acpi/x86/microvm/DSDT.pcie         | Bin 3023 -> 2985 bytes
 32 files changed, 811 insertions(+), 607 deletions(-)
 create mode 100644 tests/data/acpi/aarch64/virt/DSDT.acpipcihp
 create mode 100644 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex
 create mode 100644 tests/data/acpi/aarch64/virt/DSDT.viot

-- 
2.49.0
Re: [PATCH v5 00/36] ACPI PCI Hotplug support on ARM
Posted by Eric Auger 4 months, 1 week ago
Hi,

On 7/3/25 2:35 PM, Eric Auger wrote:
> This series enables ACPI PCI hotplug/hotunplug on ARM.
> It is not enabled by default and ACPI PCI hotplug can
> be selected by setting:
>
> -global acpi-ged.acpi-pci-hotplug-with-bridge-support=on
>
> Expected benefits should be similar to those listed in [1],
> ie. removal of some racy behaviors, improved latencies.
>
> The infrastructure used in x86 is heavily reused and a
> huge part of the series consists in moving code from
> hw/i386/acpi-build.c to a generic place and slightly
> adapting it to make it usable on ARM. The DSDT table is
> augmented to support ACPI PCI hotplug elements.
>
> On ARM we use use a GED event to notify the OS about
> hotplug events.

gentle ping on this series. I was hoping that this could target 10.1 but
I ackowledge this is a big series to review and I am already very
grateful to all reviewers.

At least patches 1-15 have collected R-bs including Igor's ones. They
can be seen as code move/reshuffle/cleanup and does not bring any
functionality. I think patches 16-19 also belong to prerequisite and
fixes and are easy to parse.
So if we could at least have patches 1-19 merged in 10.1, this would
alleviate the rebase efforts for next respins if any.

Of course I have not totally lost all hopes to get this in in 10.1 ;-)
and I will be able to diligently respin upon comments.

Thanks

Eric
>
> Best Regards
>
> Eric
>
> This series can be found at:
> https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v5
>
> previous series:
> https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v4
>
> History:
> v4 -> v5:
> - Collected Jonathan's R-bs (many thanks!)
> - fixed the tests/qtest/bios-tables-test issue by
>   creating a variant for the viot test
> - use the 3 phase reset API
> - fixed qom-test failures that were due to unconditionnal
>   fetches of the GED property
>
> v3 -> v4:
> - toook into account all comments on v3
> - static acpi-index is now supported unconditionally
>   from acpi pcihp option. See indiviual patches.
> - I hit a problem with ref block generation at
>   [19/32] tests/qtest/bios-tables-test: Update ARM DSDT reference
>   blobs: despite I regenerate the blobs, I get some errors.
>
> v2 -> v3:
> - lot of changes taking into account various feedbacks
>   (many thanks to all reviewers). Please refer to
>   individual patches for details. Main changes:
>   - no more machine option, acpi pci hp is not set by
>     default.
>   - removal of 2 unused variables in the osc method
>   - introduction of GED property to set the bus
>   - rework of the init/reset sequence
>   - fix virtio-mem-pci hotplug regression
>
> v1 -> v2:
> - collected a bunch of R-bs from Gustavo (many thanks!)
> - Fixed the breakage of bios-tables-test in TCG mode by
>   incorporating Gustavo's patches (part of
>   [PATCH 0/5] ACPI tests for PCI Hotplug on ARM
>   https://lore.kernel.org/all/20250526053123.1434204-1-gustavo.romero@linaro.org/)
> - Tweeked the dsdt aml changes to avoid any dsdt blob difference when
>   acpi-pcihp is off.
>
> RFC -> v1:
> - First 3 trivial patches were pulled separately
> - Fix of the register region size (0x18), ie. ACPI_PCIHP_SIZE
> - addition of aml_pci_edsm which was not called in RFC
> - acpi-index feature is now fixed. vms->bus was not set on
>   acpi_pcihp_init. The init sequence is still hacky though. Suggestions
>   are welcome.
>
> [1] [PATCH v6 0/6] Use ACPI PCI hot-plug for Q35
> https://lore.kernel.org/all/20210713004205.775386-1-jusual@redhat.com/
>
>
> Eric Auger (32):
>   hw/i386/acpi-build: Make aml_pci_device_dsm() static
>   hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp
>   hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to
>     acpi_dsdt_add_pci_osc
>   hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
>   hw/acpi/ged: Add a acpi-pci-hotplug-with-bridge-support property
>   hw/pci-host/gpex-acpi: Use GED acpi pcihp property
>   hw/i386/acpi-build: Turn build_q35_osc_method into a generic method
>   hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method
>   tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change
>   hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper
>   hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug
>   hw/i386/acpi-build: Move build_append_notification_callback to pcihp
>   hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots to
>     pcihp
>   hw/i386/acpi-build: Use AcpiPciHpState::root in acpi_set_pci_info
>   hw/i386/acpi-build: Move aml_pci_edsm to a generic place
>   qtest/bios-tables-test: Prepare for fixing the aarch64 viot test
>   qtest/bios-tables-test: Add a variant to the aarch64 viot test
>   qtest/bios-tables-test: Generate DSDT.viot
>   hw/arm/virt-acpi-build: Let non hotplug ports support static
>     acpi-index
>   tests/qtest/bios-tables-test: Update ARM DSDT reference blobs
>   hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI
>     hotplug
>   hw/acpi/ged: Add a bus link property
>   hw/arm/virt: Pass the bus on the ged creation
>   hw/acpi/ged: Call pcihp plug callbacks in hotplug handler
>     implementation
>   hw/acpi/pcihp: Remove root arg in acpi_pcihp_init
>   hw/acpi/ged: Prepare the device to react to PCI hotplug events
>   hw/acpi/ged: Support migration of AcpiPciHpState
>   hw/core/sysbus: Introduce sysbus_mmio_map_name() helper
>   hw/arm/virt: Minor code reshuffling in create_acpi_ged
>   hw/arm/virt: Let virt support pci hotplug/unplug GED event
>   qtest/bios-tables-test: Generate reference blob for
>     DSDT.hpoffacpiindex
>   qtest/bios-tables-test: Generate reference blob for DSDT.acpipcihp
>
> Gustavo Romero (4):
>   tests/qtest/bios-tables-test: Prepare for changes in the DSDT table
>   tests/qtest/bios-tables-test: Prepare for changes in the arm virt DSDT
>     table
>   tests/qtest/bios-tables-test: Prepare for addition of acpi pci hp
>     tests
>   tests/qtest/bios-tables-test: Add aarch64 ACPI PCI hotplug test
>
>  hw/i386/acpi-build.h                          |   4 -
>  include/hw/acpi/generic_event_device.h        |  17 +-
>  include/hw/acpi/pci.h                         |   5 +-
>  include/hw/acpi/pcihp.h                       |  17 +-
>  include/hw/arm/virt.h                         |   1 +
>  include/hw/pci-host/gpex.h                    |   1 +
>  include/hw/sysbus.h                           |   1 +
>  hw/acpi/acpi-pci-hotplug-stub.c               |   2 +-
>  hw/acpi/generic_event_device.c                |  77 +++
>  hw/acpi/ich9.c                                |   7 +-
>  hw/acpi/pci-bridge.c                          |  54 ++
>  hw/acpi/pci.c                                 |  50 ++
>  hw/acpi/pcihp.c                               | 439 ++++++++++++++-
>  hw/acpi/piix4.c                               |   5 +-
>  hw/arm/virt-acpi-build.c                      |  38 ++
>  hw/arm/virt.c                                 |  27 +-
>  hw/core/sysbus.c                              |  11 +
>  hw/i386/acpi-build.c                          | 532 +-----------------
>  hw/pci-host/gpex-acpi.c                       |  74 +--
>  tests/qtest/bios-tables-test.c                |  53 ++
>  hw/arm/Kconfig                                |   2 +
>  hw/pci-host/Kconfig                           |   1 +
>  tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5293 bytes
>  .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5379 bytes
>  tests/data/acpi/aarch64/virt/DSDT.acpipcihp   | Bin 0 -> 6202 bytes
>  .../acpi/aarch64/virt/DSDT.hpoffacpiindex     | Bin 0 -> 5347 bytes
>  tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6654 bytes
>  tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7768 bytes
>  tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5495 bytes
>  tests/data/acpi/aarch64/virt/DSDT.viot        | Bin 0 -> 5310 bytes
>  tests/data/acpi/riscv64/virt/DSDT             | Bin 3576 -> 3538 bytes
>  tests/data/acpi/x86/microvm/DSDT.pcie         | Bin 3023 -> 2985 bytes
>  32 files changed, 811 insertions(+), 607 deletions(-)
>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.acpipcihp
>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex
>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.viot
>
Re: [PATCH v5 00/36] ACPI PCI Hotplug support on ARM
Posted by Michael S. Tsirkin 4 months, 1 week ago
On Mon, Jul 07, 2025 at 07:09:34PM +0200, Eric Auger wrote:
> Hi,
> 
> On 7/3/25 2:35 PM, Eric Auger wrote:
> > This series enables ACPI PCI hotplug/hotunplug on ARM.
> > It is not enabled by default and ACPI PCI hotplug can
> > be selected by setting:
> >
> > -global acpi-ged.acpi-pci-hotplug-with-bridge-support=on
> >
> > Expected benefits should be similar to those listed in [1],
> > ie. removal of some racy behaviors, improved latencies.
> >
> > The infrastructure used in x86 is heavily reused and a
> > huge part of the series consists in moving code from
> > hw/i386/acpi-build.c to a generic place and slightly
> > adapting it to make it usable on ARM. The DSDT table is
> > augmented to support ACPI PCI hotplug elements.
> >
> > On ARM we use use a GED event to notify the OS about
> > hotplug events.
> 
> gentle ping on this series. I was hoping that this could target 10.1 but
> I ackowledge this is a big series to review and I am already very
> grateful to all reviewers.
> 
> At least patches 1-15 have collected R-bs including Igor's ones. They
> can be seen as code move/reshuffle/cleanup and does not bring any
> functionality. I think patches 16-19 also belong to prerequisite and
> fixes and are easy to parse.
> So if we could at least have patches 1-19 merged in 10.1, this would
> alleviate the rebase efforts for next respins if any.
> 
> Of course I have not totally lost all hopes to get this in in 10.1 ;-)
> and I will be able to diligently respin upon comments.
> 
> Thanks
> 
> Eric


If no one objects, I can queue this. OK with ARM maintainers?
I think the only comment I have is shorter/cropped commit logs for the blobs,
that Jonathan already pointed out.
Want to respin doing that?


> >
> > Best Regards
> >
> > Eric
> >
> > This series can be found at:
> > https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v5
> >
> > previous series:
> > https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v4
> >
> > History:
> > v4 -> v5:
> > - Collected Jonathan's R-bs (many thanks!)
> > - fixed the tests/qtest/bios-tables-test issue by
> >   creating a variant for the viot test
> > - use the 3 phase reset API
> > - fixed qom-test failures that were due to unconditionnal
> >   fetches of the GED property
> >
> > v3 -> v4:
> > - toook into account all comments on v3
> > - static acpi-index is now supported unconditionally
> >   from acpi pcihp option. See indiviual patches.
> > - I hit a problem with ref block generation at
> >   [19/32] tests/qtest/bios-tables-test: Update ARM DSDT reference
> >   blobs: despite I regenerate the blobs, I get some errors.
> >
> > v2 -> v3:
> > - lot of changes taking into account various feedbacks
> >   (many thanks to all reviewers). Please refer to
> >   individual patches for details. Main changes:
> >   - no more machine option, acpi pci hp is not set by
> >     default.
> >   - removal of 2 unused variables in the osc method
> >   - introduction of GED property to set the bus
> >   - rework of the init/reset sequence
> >   - fix virtio-mem-pci hotplug regression
> >
> > v1 -> v2:
> > - collected a bunch of R-bs from Gustavo (many thanks!)
> > - Fixed the breakage of bios-tables-test in TCG mode by
> >   incorporating Gustavo's patches (part of
> >   [PATCH 0/5] ACPI tests for PCI Hotplug on ARM
> >   https://lore.kernel.org/all/20250526053123.1434204-1-gustavo.romero@linaro.org/)
> > - Tweeked the dsdt aml changes to avoid any dsdt blob difference when
> >   acpi-pcihp is off.
> >
> > RFC -> v1:
> > - First 3 trivial patches were pulled separately
> > - Fix of the register region size (0x18), ie. ACPI_PCIHP_SIZE
> > - addition of aml_pci_edsm which was not called in RFC
> > - acpi-index feature is now fixed. vms->bus was not set on
> >   acpi_pcihp_init. The init sequence is still hacky though. Suggestions
> >   are welcome.
> >
> > [1] [PATCH v6 0/6] Use ACPI PCI hot-plug for Q35
> > https://lore.kernel.org/all/20210713004205.775386-1-jusual@redhat.com/
> >
> >
> > Eric Auger (32):
> >   hw/i386/acpi-build: Make aml_pci_device_dsm() static
> >   hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp
> >   hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to
> >     acpi_dsdt_add_pci_osc
> >   hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
> >   hw/acpi/ged: Add a acpi-pci-hotplug-with-bridge-support property
> >   hw/pci-host/gpex-acpi: Use GED acpi pcihp property
> >   hw/i386/acpi-build: Turn build_q35_osc_method into a generic method
> >   hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method
> >   tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change
> >   hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper
> >   hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug
> >   hw/i386/acpi-build: Move build_append_notification_callback to pcihp
> >   hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots to
> >     pcihp
> >   hw/i386/acpi-build: Use AcpiPciHpState::root in acpi_set_pci_info
> >   hw/i386/acpi-build: Move aml_pci_edsm to a generic place
> >   qtest/bios-tables-test: Prepare for fixing the aarch64 viot test
> >   qtest/bios-tables-test: Add a variant to the aarch64 viot test
> >   qtest/bios-tables-test: Generate DSDT.viot
> >   hw/arm/virt-acpi-build: Let non hotplug ports support static
> >     acpi-index
> >   tests/qtest/bios-tables-test: Update ARM DSDT reference blobs
> >   hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI
> >     hotplug
> >   hw/acpi/ged: Add a bus link property
> >   hw/arm/virt: Pass the bus on the ged creation
> >   hw/acpi/ged: Call pcihp plug callbacks in hotplug handler
> >     implementation
> >   hw/acpi/pcihp: Remove root arg in acpi_pcihp_init
> >   hw/acpi/ged: Prepare the device to react to PCI hotplug events
> >   hw/acpi/ged: Support migration of AcpiPciHpState
> >   hw/core/sysbus: Introduce sysbus_mmio_map_name() helper
> >   hw/arm/virt: Minor code reshuffling in create_acpi_ged
> >   hw/arm/virt: Let virt support pci hotplug/unplug GED event
> >   qtest/bios-tables-test: Generate reference blob for
> >     DSDT.hpoffacpiindex
> >   qtest/bios-tables-test: Generate reference blob for DSDT.acpipcihp
> >
> > Gustavo Romero (4):
> >   tests/qtest/bios-tables-test: Prepare for changes in the DSDT table
> >   tests/qtest/bios-tables-test: Prepare for changes in the arm virt DSDT
> >     table
> >   tests/qtest/bios-tables-test: Prepare for addition of acpi pci hp
> >     tests
> >   tests/qtest/bios-tables-test: Add aarch64 ACPI PCI hotplug test
> >
> >  hw/i386/acpi-build.h                          |   4 -
> >  include/hw/acpi/generic_event_device.h        |  17 +-
> >  include/hw/acpi/pci.h                         |   5 +-
> >  include/hw/acpi/pcihp.h                       |  17 +-
> >  include/hw/arm/virt.h                         |   1 +
> >  include/hw/pci-host/gpex.h                    |   1 +
> >  include/hw/sysbus.h                           |   1 +
> >  hw/acpi/acpi-pci-hotplug-stub.c               |   2 +-
> >  hw/acpi/generic_event_device.c                |  77 +++
> >  hw/acpi/ich9.c                                |   7 +-
> >  hw/acpi/pci-bridge.c                          |  54 ++
> >  hw/acpi/pci.c                                 |  50 ++
> >  hw/acpi/pcihp.c                               | 439 ++++++++++++++-
> >  hw/acpi/piix4.c                               |   5 +-
> >  hw/arm/virt-acpi-build.c                      |  38 ++
> >  hw/arm/virt.c                                 |  27 +-
> >  hw/core/sysbus.c                              |  11 +
> >  hw/i386/acpi-build.c                          | 532 +-----------------
> >  hw/pci-host/gpex-acpi.c                       |  74 +--
> >  tests/qtest/bios-tables-test.c                |  53 ++
> >  hw/arm/Kconfig                                |   2 +
> >  hw/pci-host/Kconfig                           |   1 +
> >  tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5293 bytes
> >  .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5379 bytes
> >  tests/data/acpi/aarch64/virt/DSDT.acpipcihp   | Bin 0 -> 6202 bytes
> >  .../acpi/aarch64/virt/DSDT.hpoffacpiindex     | Bin 0 -> 5347 bytes
> >  tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6654 bytes
> >  tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7768 bytes
> >  tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5495 bytes
> >  tests/data/acpi/aarch64/virt/DSDT.viot        | Bin 0 -> 5310 bytes
> >  tests/data/acpi/riscv64/virt/DSDT             | Bin 3576 -> 3538 bytes
> >  tests/data/acpi/x86/microvm/DSDT.pcie         | Bin 3023 -> 2985 bytes
> >  32 files changed, 811 insertions(+), 607 deletions(-)
> >  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.acpipcihp
> >  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex
> >  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.viot
> >
Re: [PATCH v5 00/36] ACPI PCI Hotplug support on ARM
Posted by Eric Auger 4 months, 1 week ago
Hi Michael,

On 7/7/25 7:53 PM, Michael S. Tsirkin wrote:
> On Mon, Jul 07, 2025 at 07:09:34PM +0200, Eric Auger wrote:
>> Hi,
>>
>> On 7/3/25 2:35 PM, Eric Auger wrote:
>>> This series enables ACPI PCI hotplug/hotunplug on ARM.
>>> It is not enabled by default and ACPI PCI hotplug can
>>> be selected by setting:
>>>
>>> -global acpi-ged.acpi-pci-hotplug-with-bridge-support=on
>>>
>>> Expected benefits should be similar to those listed in [1],
>>> ie. removal of some racy behaviors, improved latencies.
>>>
>>> The infrastructure used in x86 is heavily reused and a
>>> huge part of the series consists in moving code from
>>> hw/i386/acpi-build.c to a generic place and slightly
>>> adapting it to make it usable on ARM. The DSDT table is
>>> augmented to support ACPI PCI hotplug elements.
>>>
>>> On ARM we use use a GED event to notify the OS about
>>> hotplug events.
>> gentle ping on this series. I was hoping that this could target 10.1 but
>> I ackowledge this is a big series to review and I am already very
>> grateful to all reviewers.
>>
>> At least patches 1-15 have collected R-bs including Igor's ones. They
>> can be seen as code move/reshuffle/cleanup and does not bring any
>> functionality. I think patches 16-19 also belong to prerequisite and
>> fixes and are easy to parse.
>> So if we could at least have patches 1-19 merged in 10.1, this would
>> alleviate the rebase efforts for next respins if any.
>>
>> Of course I have not totally lost all hopes to get this in in 10.1 ;-)
>> and I will be able to diligently respin upon comments.
>>
>> Thanks
>>
>> Eric
>
> If no one objects, I can queue this. OK with ARM maintainers?
> I think the only comment I have is shorter/cropped commit logs for the blobs,
> that Jonathan already pointed out.
> Want to respin doing that?
Sure I will respin today with that change and grabbing latest R-bs from
Jonathan.

Thanks

Eric
>
>
>>> Best Regards
>>>
>>> Eric
>>>
>>> This series can be found at:
>>> https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v5
>>>
>>> previous series:
>>> https://github.com/eauger/qemu/tree/arm-acpi-pcihp-v4
>>>
>>> History:
>>> v4 -> v5:
>>> - Collected Jonathan's R-bs (many thanks!)
>>> - fixed the tests/qtest/bios-tables-test issue by
>>>   creating a variant for the viot test
>>> - use the 3 phase reset API
>>> - fixed qom-test failures that were due to unconditionnal
>>>   fetches of the GED property
>>>
>>> v3 -> v4:
>>> - toook into account all comments on v3
>>> - static acpi-index is now supported unconditionally
>>>   from acpi pcihp option. See indiviual patches.
>>> - I hit a problem with ref block generation at
>>>   [19/32] tests/qtest/bios-tables-test: Update ARM DSDT reference
>>>   blobs: despite I regenerate the blobs, I get some errors.
>>>
>>> v2 -> v3:
>>> - lot of changes taking into account various feedbacks
>>>   (many thanks to all reviewers). Please refer to
>>>   individual patches for details. Main changes:
>>>   - no more machine option, acpi pci hp is not set by
>>>     default.
>>>   - removal of 2 unused variables in the osc method
>>>   - introduction of GED property to set the bus
>>>   - rework of the init/reset sequence
>>>   - fix virtio-mem-pci hotplug regression
>>>
>>> v1 -> v2:
>>> - collected a bunch of R-bs from Gustavo (many thanks!)
>>> - Fixed the breakage of bios-tables-test in TCG mode by
>>>   incorporating Gustavo's patches (part of
>>>   [PATCH 0/5] ACPI tests for PCI Hotplug on ARM
>>>   https://lore.kernel.org/all/20250526053123.1434204-1-gustavo.romero@linaro.org/)
>>> - Tweeked the dsdt aml changes to avoid any dsdt blob difference when
>>>   acpi-pcihp is off.
>>>
>>> RFC -> v1:
>>> - First 3 trivial patches were pulled separately
>>> - Fix of the register region size (0x18), ie. ACPI_PCIHP_SIZE
>>> - addition of aml_pci_edsm which was not called in RFC
>>> - acpi-index feature is now fixed. vms->bus was not set on
>>>   acpi_pcihp_init. The init sequence is still hacky though. Suggestions
>>>   are welcome.
>>>
>>> [1] [PATCH v6 0/6] Use ACPI PCI hot-plug for Q35
>>> https://lore.kernel.org/all/20210713004205.775386-1-jusual@redhat.com/
>>>
>>>
>>> Eric Auger (32):
>>>   hw/i386/acpi-build: Make aml_pci_device_dsm() static
>>>   hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp
>>>   hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to
>>>     acpi_dsdt_add_pci_osc
>>>   hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation
>>>   hw/acpi/ged: Add a acpi-pci-hotplug-with-bridge-support property
>>>   hw/pci-host/gpex-acpi: Use GED acpi pcihp property
>>>   hw/i386/acpi-build: Turn build_q35_osc_method into a generic method
>>>   hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method
>>>   tests/qtest/bios-tables-test: Update DSDT blobs after GPEX _OSC change
>>>   hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper
>>>   hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug
>>>   hw/i386/acpi-build: Move build_append_notification_callback to pcihp
>>>   hw/i386/acpi-build: Move build_append_pci_bus_devices/pcihp_slots to
>>>     pcihp
>>>   hw/i386/acpi-build: Use AcpiPciHpState::root in acpi_set_pci_info
>>>   hw/i386/acpi-build: Move aml_pci_edsm to a generic place
>>>   qtest/bios-tables-test: Prepare for fixing the aarch64 viot test
>>>   qtest/bios-tables-test: Add a variant to the aarch64 viot test
>>>   qtest/bios-tables-test: Generate DSDT.viot
>>>   hw/arm/virt-acpi-build: Let non hotplug ports support static
>>>     acpi-index
>>>   tests/qtest/bios-tables-test: Update ARM DSDT reference blobs
>>>   hw/arm/virt-acpi-build: Modify the DSDT ACPI table to enable ACPI PCI
>>>     hotplug
>>>   hw/acpi/ged: Add a bus link property
>>>   hw/arm/virt: Pass the bus on the ged creation
>>>   hw/acpi/ged: Call pcihp plug callbacks in hotplug handler
>>>     implementation
>>>   hw/acpi/pcihp: Remove root arg in acpi_pcihp_init
>>>   hw/acpi/ged: Prepare the device to react to PCI hotplug events
>>>   hw/acpi/ged: Support migration of AcpiPciHpState
>>>   hw/core/sysbus: Introduce sysbus_mmio_map_name() helper
>>>   hw/arm/virt: Minor code reshuffling in create_acpi_ged
>>>   hw/arm/virt: Let virt support pci hotplug/unplug GED event
>>>   qtest/bios-tables-test: Generate reference blob for
>>>     DSDT.hpoffacpiindex
>>>   qtest/bios-tables-test: Generate reference blob for DSDT.acpipcihp
>>>
>>> Gustavo Romero (4):
>>>   tests/qtest/bios-tables-test: Prepare for changes in the DSDT table
>>>   tests/qtest/bios-tables-test: Prepare for changes in the arm virt DSDT
>>>     table
>>>   tests/qtest/bios-tables-test: Prepare for addition of acpi pci hp
>>>     tests
>>>   tests/qtest/bios-tables-test: Add aarch64 ACPI PCI hotplug test
>>>
>>>  hw/i386/acpi-build.h                          |   4 -
>>>  include/hw/acpi/generic_event_device.h        |  17 +-
>>>  include/hw/acpi/pci.h                         |   5 +-
>>>  include/hw/acpi/pcihp.h                       |  17 +-
>>>  include/hw/arm/virt.h                         |   1 +
>>>  include/hw/pci-host/gpex.h                    |   1 +
>>>  include/hw/sysbus.h                           |   1 +
>>>  hw/acpi/acpi-pci-hotplug-stub.c               |   2 +-
>>>  hw/acpi/generic_event_device.c                |  77 +++
>>>  hw/acpi/ich9.c                                |   7 +-
>>>  hw/acpi/pci-bridge.c                          |  54 ++
>>>  hw/acpi/pci.c                                 |  50 ++
>>>  hw/acpi/pcihp.c                               | 439 ++++++++++++++-
>>>  hw/acpi/piix4.c                               |   5 +-
>>>  hw/arm/virt-acpi-build.c                      |  38 ++
>>>  hw/arm/virt.c                                 |  27 +-
>>>  hw/core/sysbus.c                              |  11 +
>>>  hw/i386/acpi-build.c                          | 532 +-----------------
>>>  hw/pci-host/gpex-acpi.c                       |  74 +--
>>>  tests/qtest/bios-tables-test.c                |  53 ++
>>>  hw/arm/Kconfig                                |   2 +
>>>  hw/pci-host/Kconfig                           |   1 +
>>>  tests/data/acpi/aarch64/virt/DSDT             | Bin 5196 -> 5293 bytes
>>>  .../data/acpi/aarch64/virt/DSDT.acpihmatvirt  | Bin 5282 -> 5379 bytes
>>>  tests/data/acpi/aarch64/virt/DSDT.acpipcihp   | Bin 0 -> 6202 bytes
>>>  .../acpi/aarch64/virt/DSDT.hpoffacpiindex     | Bin 0 -> 5347 bytes
>>>  tests/data/acpi/aarch64/virt/DSDT.memhp       | Bin 6557 -> 6654 bytes
>>>  tests/data/acpi/aarch64/virt/DSDT.pxb         | Bin 7679 -> 7768 bytes
>>>  tests/data/acpi/aarch64/virt/DSDT.topology    | Bin 5398 -> 5495 bytes
>>>  tests/data/acpi/aarch64/virt/DSDT.viot        | Bin 0 -> 5310 bytes
>>>  tests/data/acpi/riscv64/virt/DSDT             | Bin 3576 -> 3538 bytes
>>>  tests/data/acpi/x86/microvm/DSDT.pcie         | Bin 3023 -> 2985 bytes
>>>  32 files changed, 811 insertions(+), 607 deletions(-)
>>>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.acpipcihp
>>>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex
>>>  create mode 100644 tests/data/acpi/aarch64/virt/DSDT.viot
>>>
Re: [PATCH v5 00/36] ACPI PCI Hotplug support on ARM
Posted by Peter Maydell 4 months, 1 week ago
On Mon, 7 Jul 2025 at 18:53, Michael S. Tsirkin <mst@redhat.com> wrote:
>
> On Mon, Jul 07, 2025 at 07:09:34PM +0200, Eric Auger wrote:
> > Hi,
> >
> > On 7/3/25 2:35 PM, Eric Auger wrote:
> > > This series enables ACPI PCI hotplug/hotunplug on ARM.
> > > It is not enabled by default and ACPI PCI hotplug can
> > > be selected by setting:
> > >
> > > -global acpi-ged.acpi-pci-hotplug-with-bridge-support=on
> > >
> > > Expected benefits should be similar to those listed in [1],
> > > ie. removal of some racy behaviors, improved latencies.
> > >
> > > The infrastructure used in x86 is heavily reused and a
> > > huge part of the series consists in moving code from
> > > hw/i386/acpi-build.c to a generic place and slightly
> > > adapting it to make it usable on ARM. The DSDT table is
> > > augmented to support ACPI PCI hotplug elements.
> > >
> > > On ARM we use use a GED event to notify the OS about
> > > hotplug events.
> >
> > gentle ping on this series. I was hoping that this could target 10.1 but
> > I ackowledge this is a big series to review and I am already very
> > grateful to all reviewers.
> >
> > At least patches 1-15 have collected R-bs including Igor's ones. They
> > can be seen as code move/reshuffle/cleanup and does not bring any
> > functionality. I think patches 16-19 also belong to prerequisite and
> > fixes and are easy to parse.
> > So if we could at least have patches 1-19 merged in 10.1, this would
> > alleviate the rebase efforts for next respins if any.
> >
> > Of course I have not totally lost all hopes to get this in in 10.1 ;-)
> > and I will be able to diligently respin upon comments.

> If no one objects, I can queue this. OK with ARM maintainers?

Judging by the diffstat this doesn't really touch the arm
stuff specifically, so if reviewers who are familiar with
hotplug and ACPI are happy that this is the correct way to
do PCI hotplug for Arm and have reviewed it then I'm fine
with going via the ACPI tree for whatever subset of patches
you think are ready to go in.

thanks
-- PMM