Hi Gustavo, On 5/5/25 3:26 PM, Gustavo Romero wrote: > Hi Eric, > > On 4/28/25 07:25, Eric Auger wrote: >> This series enables APCI PCI hotplug/hotunplug on ARM >> and makes it default for 10.1 machine type. This aligns with >> x86 q35 machine. Expected benefits should be similar to >> those listed in [1]. >> >> 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. >> >> I have not noticed any tests/qtest/bios-tables-test failures >> neither on x86 nor ARM. x86 DSDT table has not changed. >> ARM DSDT table definitively has but there are no tests >> impacted. ARM misses hotplug tests that do exist on x86. This >> most probably should be considered in the future. >> >> Best Regards >> >> Eric >> >> This series can be found at: >> https://github.com/eauger/qemu/tree/arm-acpi-pcihp-rfc >> >> [1] [PATCH v6 0/6] Use ACPI PCI hot-plug for Q35 >> https://lore.kernel.org/all/20210713004205.775386-1-jus...@redhat.com/ > > I've just started to review your series and went to a quick smoke test > by hotplugging a net adapter and got the following kernel internal error: > > (qemu) device_add virtio-net-pci,bus=pcie.1,addr=0,id=na > (qemu) [ 64.165411] pci 0000:01:00.0: [1af4:1041] type 00 class > 0x020000 > [ 64.165895] pci 0000:01:00.0: reg 0x14: [mem 0x00000000-0x00000fff] > [ 64.166259] pci 0000:01:00.0: reg 0x20: [mem 0x00000000-0x00003fff > 64bit pref] > [ 64.166658] pci 0000:01:00.0: reg 0x30: [mem 0x00000000-0x0003ffff > pref] > [ 64.167153] pci 0000:01:00.0: enabling Extended Tags > [ 64.179972] Internal error: synchronous external abort: > 0000000096000050 [#1] SMP > [ 64.180719] Modules linked in: aes_ce_blk aes_ce_cipher polyval_ce > polyval_generic ghash_ce gf128mul sha2_ce binfmt_misc sha256_arm64 > sha1_ce nls_ascii nls_cp437 vfat fat evdev cfg80211 rfkill loop fuse > efi_pstore drm dm_mod dax configfs efivarfs qemu_fw_cfg ip_tables > x_tables autofs4 ext4 crc16 mbcache jbd2 crc32c_generic virtio_scsi > virtio_net scsi_mod net_failover failover virtio_blk scsi_common > crct10dif_ce crct10dif_common virtio_pci virtio_pci_legacy_dev > virtio_pci_modern_dev virtio_mmio > [ 64.183656] CPU: 0 PID: 23 Comm: kworker/u2:1 Not tainted > 6.1.0-30-arm64 #1 Debian 6.1.124-1 > [ 64.184071] Hardware name: QEMU QEMU Virtual Machine, BIOS > edk2-stable202408-prebuilt.qemu.org 08/13/2024 > [ 64.184759] Workqueue: kacpi_hotplug acpi_hotplug_work_fn > [ 64.185320] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS > BTYPE=--) > [ 64.185737] pc : acpi_ex_system_memory_space_handler+0x290/0x300 > [ 64.186175] lr : acpi_ev_address_space_dispatch+0x124/0x334 > [ 64.186490] sp : ffff80000a6bb3b0 > [ 64.186663] x29: ffff80000a6bb3b0 x28: ffff0003fcbb08b8 x27: > 0000000000000000 > [ 64.187126] x26: ffff0003fcbb0288 x25: ffff80000a6bb568 x24: > 0000000000000001 > [ 64.187499] x23: ffff80000a6bb568 x22: 0000000000000004 x21: > ffff0000c206cb00 > [ 64.187885] x20: 00000000090c0014 x19: 0000000000000020 x18: > 0000000000000000 > [ 64.188265] x17: 0000000000000000 x16: 0000000000000000 x15: > 0000000000000000 > [ 64.188640] x14: 0000000000000000 x13: 4d43c3194dea1791 x12: > 4d7a3553e5c937d0 > [ 64.189003] x11: 0000000000000001 x10: 0000000000000000 x9 : > ffff800008735b34 > [ 64.189383] x8 : 0000000000000001 x7 : ffff80000873c850 x6 : > 00000000000000f8 > [ 64.189778] x5 : ffff0000c206cb00 x4 : 0000000000000000 x3 : > 00000000090c0018 > [ 64.190163] x2 : ffff80000a9af014 x1 : 00000000090c0018 x0 : > 0000000000000001 > [ 64.190734] Call trace: > [ 64.191086] acpi_ex_system_memory_space_handler+0x290/0x300 > [ 64.191696] acpi_ev_address_space_dispatch+0x124/0x334 > [ 64.192042] acpi_ex_access_region+0xe4/0x2e0 > [ 64.192287] acpi_ex_field_datum_io+0x88/0x200 > [ 64.192509] acpi_ex_write_with_update_rule+0xd4/0x120 > [ 64.192793] acpi_ex_insert_into_field+0x210/0x2b0 > [ 64.193048] acpi_ex_write_data_to_field+0xa0/0x190 > [ 64.193298] acpi_ex_store_object_to_node+0x150/0x240 > [ 64.193527] acpi_ex_store+0x144/0x300 > [ 64.193726] acpi_ex_opcode_1A_1T_1R+0x218/0x580 > [ 64.193971] acpi_ds_exec_end_op+0x24c/0x4b0 > [ 64.194227] acpi_ps_parse_loop+0x100/0x6a0 > [ 64.194477] acpi_ps_parse_aml+0x94/0x3b0 > [ 64.194674] acpi_ps_execute_method+0x128/0x25c > [ 64.194922] acpi_ns_evaluate+0x1f0/0x2d0 > [ 64.195148] acpi_evaluate_object+0x138/0x2d0 > [ 64.195380] acpi_evaluate_dsm+0xb8/0x134 > [ 64.195613] acpi_check_dsm+0x34/0xdc > [ 64.195822] smbios_attr_is_visible+0x5c/0xb0 > [ 64.196089] internal_create_group+0xd0/0x3d0 > [ 64.196335] internal_create_groups+0x58/0xe0 > [ 64.196584] sysfs_create_groups+0x20/0x30 > [ 64.196813] device_add_groups+0x18/0x2c > [ 64.197039] bus_add_device+0x48/0x160 > [ 64.197260] device_add+0x3a4/0x85c > [ 64.197463] pci_device_add+0x308/0x660 > [ 64.197680] pci_scan_single_device+0xe4/0x114 > [ 64.197941] pci_scan_slot+0x70/0x1fc > [ 64.198155] acpiphp_rescan_slot+0x90/0xa4 > [ 64.198366] acpiphp_hotplug_notify+0x2a8/0x300 > [ 64.198584] acpi_device_hotplug+0x138/0x4c0 > [ 64.198819] acpi_hotplug_work_fn+0x2c/0x4c > [ 64.199045] process_one_work+0x1f4/0x460 > [ 64.199277] worker_thread+0x188/0x4e0 > [ 64.199492] kthread+0xe0/0xe4 > [ 64.199671] ret_from_fork+0x10/0x20 > [ 64.200114] Code: f90002e0 52800000 17ffff97 f94002e0 (b9000040) > [ 64.200820] ---[ end trace 0000000000000000 ]--- > > (qemu) > > This is a Debian Bookworm stock kernel 6.1. I built QEMU from your GH > branch. > > The machine was started with: > > ./qemu-system-aarch64 -m 16G -nographic -machine > type=virt,gic-version=max -cpu cortex-a57 -initrd > /mnt/initrd.img-6.1.0-30-arm64 -kernel /mnt/vmlinuz-6.1.0-30-arm64 > -append "root=/dev/vda1 console=ttyAMA0,115200 acpi=force" -device > virtio-scsi-pci -device virtio-blk-pci,drive=root -drive > if=none,id=root,file=/mnt/debian-12-nocloud-arm64.qcow2 -device > pcie-root-port,id=pcie.1,chassis=1,slot=1 -bios > ./pc-bios/edk2-aarch64-code.fd > > ./pc-bios/edk2-aarch64-code.fd is the one found under ./build dir, so > nothing special.
I have just tested debian-12-nocloud-arm64.qcow2 which features 6.1.0-34-arm64 + edk2-aarch64-code.fd and I am able to hotplug/hot-unplug the virtio-net-pci device. Can you retry without -initrd /mnt/initrd.img-6.1.0-30-arm64 -kernel /mnt/vmlinuz-6.1.0-30-arm64 -append "root=/dev/vda1 console=ttyAMA0,115200 acpi=force" ? Cheers Eric > > It seems Linux acpi crashed when ingesting the _DSM method but I could > not > figure out what exactly in it could cause it. > > > Cheers, > Gustavo > >> >> Eric Auger (24): >> hw/pci/pcie_port: Fix pcie_slot_is_hotpluggbale_bus typo >> hw/acpi/ged: Fix wrong identation >> hw/i386/acpi-build: Fix build_append_notfication_callback typo >> hw/i386/acpi-build: Make aml_pci_device_dsm() static >> hw/arm/virt: Introduce machine state acpi pcihp flags and props >> 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/pci-host/gpex-acpi: Propagate hotplug type info from virt machine >> downto gpex >> 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 >> 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 remaining pcihp generic functions to pcihp >> hw/i386/acpi-build: Introduce and use acpi_get_pci_host >> hw/arm/virt-acpi-build: Add DSDT additions for PCI hotplug >> hw/acpi/ged: Prepare the device to react to PCI hotplug events >> hw/acpi/ged: Call pcihp plug callbacks in hotplug handler >> implementation >> hw/acpi/ged: Support migration of AcpiPciHpState >> hw/core/sysbus: Introduce sysbus_mmio_map_name() helper >> hw/arm/virt: Let virt support pci hotplug/unplug GED event >> hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks >> hw/arm/virt: Use ACPI PCI hotplug by default >> >> hw/i386/acpi-build.h | 4 - >> include/hw/acpi/aml-build.h | 2 + >> include/hw/acpi/generic_event_device.h | 5 + >> include/hw/acpi/pci.h | 4 +- >> include/hw/acpi/pcihp.h | 14 + >> include/hw/arm/virt.h | 4 + >> include/hw/pci-host/gpex.h | 1 + >> include/hw/sysbus.h | 1 + >> hw/acpi/aml-build.c | 50 +++ >> hw/acpi/generic_event_device.c | 64 +++- >> hw/acpi/pci.c | 20 ++ >> hw/acpi/pcihp.c | 428 +++++++++++++++++++++- >> hw/arm/virt-acpi-build.c | 26 ++ >> hw/arm/virt.c | 100 +++++- >> hw/core/sysbus.c | 11 + >> hw/i386/acpi-build.c | 475 +------------------------ >> hw/pci-host/gpex-acpi.c | 75 +--- >> hw/pci/pcie_port.c | 4 +- >> hw/arm/Kconfig | 2 + >> 19 files changed, 748 insertions(+), 542 deletions(-) >> >