Hi Gustavo,

On 5/14/25 6:27 PM, Gustavo Romero wrote:
> Hi Eric,
>
> On 5/7/25 22:13, Gustavo Romero wrote:
>> Hi Eric,
>>
>> On 5/6/25 21:51, Gustavo Romero wrote:
>>> Hi Eric,
>>>
>>> On 5/6/25 12:58, Eric Auger wrote:
>>>> 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" ?
>>>
>>> Sure, so I got the same internal error without passing the kernel,
>>> the initrd,
>>> and the append command.
>>>
>>>
>>> I also tried with a pristine Debian .qcow2 taken from:
>>>
>>> https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-arm64.qcow2
>>>
>>>
>>> I'm building your Github branch:
>>>
>>> gromero@gromero0:/mnt/git/qemu_/build$ git branch -vv | grep eauger
>>> * arm-acpi-pcihp-rfc        cf92b293ff [eauger/arm-acpi-pcihp-rfc]
>>> hw/arm/virt: Use ACPI PCI hotplug by default
>>> gromero@gromero0:/mnt/git/qemu_/build$ git log --oneline -1
>>> cf92b293ff (HEAD -> arm-acpi-pcihp-rfc, eauger/arm-acpi-pcihp-rfc)
>>> hw/arm/virt: Use ACPI PCI hotplug by default
>>>
>>> I tried in a pristine ./build dir.
>>>
>>> QEMU options:
>>>
>>> gromero@gromero0:/mnt/git/qemu_/build$ ./qemu-system-aarch64 -m 16G
>>> -nographic -machine type=virt,gic-version=max -cpu max -drive
>>> if=none,file=/mnt/debian/debian-12-nocloud-arm64.qcow2,format=qcow2,id=hd
>>> -device virtio-blk-device,drive=hd -device
>>> pcie-root-port,bus=pcie.0,chassis=1,id=pcie.1,addr=0x2.0x0 -bios
>>> ./pc-bios/edk2-aarch64-code.fd
>>> UEFI firmware (version edk2-stable202408-prebuilt.qemu.org built at
>>> 16:28:50 on Sep 12 2024)
>>>
>>> gromero@gromero0:/mnt/git/qemu_/build$ md5sum
>>> ./pc-bios/edk2-aarch64-code.fd
>>> 3426cd25efb1593f86352ec0c61d66f5  ./pc-bios/edk2-aarch64-code.fd
>>>
>>> and I get the same error:
>>>
>>> root@localhost:~# QEMU 10.0.50 monitor - type 'help' for more
>>> information
>>> (qemu) device_add virtio-net-pci,bus=pcie.1,addr=0,id=na
>>> (qemu) [   56.865284] pci 0000:01:00.0: [1af4:1041] type 00 class
>>> 0x020000
>>> [   56.866620] pci 0000:01:00.0: reg 0x14: [mem 0x00000000-0x00000fff]
>>> [   56.867711] pci 0000:01:00.0: reg 0x20: [mem
>>> 0x00000000-0x00003fff 64bit pref]
>>> [   56.868287] pci 0000:01:00.0: reg 0x30: [mem
>>> 0x00000000-0x0003ffff pref]
>>> [   56.869143] pci 0000:01:00.0: enabling Extended Tags
>>> [   56.900481] Internal error: synchronous external abort:
>>> 0000000096000050 [#1] SMP
>>> [   56.900911] Modules linked in: aes_ce_blk binfmt_misc
>>> aes_ce_cipher polyval_ce polyval_generic ghash_ce gf128mul sha3_ce
>>> sha3_generic sha512_ce sha512_arm64 sha2_ce sha256_arm64 sha1_ce
>>> nls_ascii nls_cp437 vfat fat evdev cfg80211 rfkill loop fuse drm
>>> efi_pstore dm_mod dax configfs efivarfs qemu_fw_cfg ip_tables
>>> x_tables autofs4 ext4 crc16 mbcache jbd2 crc32c_generic virtio_net
>>> net_failover failover virtio_blk crct10dif_ce crct10dif_common
>>> virtio_pci virtio_pci_legacy_dev virtio_pci_modern_dev virtio_mmio
>>> [   56.903132] CPU: 0 PID: 10 Comm: kworker/u2:0 Not tainted
>>> 6.1.0-34-arm64 #1  Debian 6.1.135-1
>>> [   56.903753] Hardware name: QEMU QEMU Virtual Machine, BIOS
>>> edk2-stable202408-prebuilt.qemu.org 08/13/2024
>>> [   56.904126] Workqueue: kacpi_hotplug acpi_hotplug_work_fn
>>> [   56.904877] pstate: 60402005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS
>>> BTYPE=--)
>>> [   56.905085] pc : acpi_ex_system_memory_space_handler+0x290/0x300
>>> [   56.905306] lr : acpi_ev_address_space_dispatch+0x124/0x334
>>> [   56.905471] sp : ffff80000809b3b0
>>> [   56.905580] x29: ffff80000809b3b0 x28: ffff0003fcb852d0 x27:
>>> 0000000000000000
>>> [   56.905856] x26: ffff0003fcb85558 x25: ffff80000809b568 x24:
>>> 0000000000000001
>>> [   56.906092] x23: ffff80000809b568 x22: 0000000000000004 x21:
>>> ffff0000c1644980
>>> [   56.906333] x20: 00000000090c0014 x19: 0000000000000020 x18:
>>> 0000000000000000
>>> [   56.906557] x17: 0000000000000000 x16: 0000000000000000 x15:
>>> 0000000000000000
>>> [   56.906793] x14: 0000000000000000 x13: ffffb8324c78ebb0 x12:
>>> 0000000000000001
>>> [   56.907016] x11: 000000000000002e x10: ffffb8324cab6e20 x9 :
>>> ffffb8324b2076b4
>>> [   56.907236] x8 : 0000000000000001 x7 : ffffb8324b20e3d0 x6 :
>>> 00000000000000f8
>>> [   56.907473] x5 : ffff0000c1644980 x4 : 0000000000000000 x3 :
>>> 00000000090c0018
>>> [   56.907705] x2 : ffff800008837014 x1 : 00000000090c0018 x0 :
>>> 0000000000000001
>>> [   56.908026] Call trace:
>>> [   56.908226]  acpi_ex_system_memory_space_handler+0x290/0x300
>>> [   56.908540]  acpi_ev_address_space_dispatch+0x124/0x334
>>> [   56.908736]  acpi_ex_access_region+0xe4/0x2e0
>>> [   56.908870]  acpi_ex_field_datum_io+0x88/0x200
>>> [   56.909003]  acpi_ex_write_with_update_rule+0xd4/0x120
>>> [   56.909152]  acpi_ex_insert_into_field+0x210/0x2b0
>>> [   56.909285]  acpi_ex_write_data_to_field+0xa0/0x190
>>> [   56.909426]  acpi_ex_store_object_to_node+0x150/0x240
>>> [   56.909569]  acpi_ex_store+0x144/0x300
>>> [   56.909688]  acpi_ex_opcode_1A_1T_1R+0x218/0x580
>>> [   56.909824]  acpi_ds_exec_end_op+0x24c/0x4b0
>>> [   56.909953]  acpi_ps_parse_loop+0x100/0x6a0
>>> [   56.910074]  acpi_ps_parse_aml+0x94/0x3b0
>>> [   56.910197]  acpi_ps_execute_method+0x128/0x25c
>>> [   56.910331]  acpi_ns_evaluate+0x1f0/0x2d0
>>> [   56.910445]  acpi_evaluate_object+0x138/0x2d0
>>> [   56.910573]  acpi_evaluate_dsm+0xb8/0x134
>>> [   56.910696]  acpi_check_dsm+0x34/0xdc
>>> [   56.910809]  smbios_attr_is_visible+0x5c/0xb0
>>> [   56.910937]  internal_create_group+0xd0/0x3d0
>>> [   56.911066]  internal_create_groups+0x58/0xe0
>>> [   56.911194]  sysfs_create_groups+0x20/0x30
>>> [   56.911315]  device_add_groups+0x18/0x2c
>>> [   56.911435]  bus_add_device+0x48/0x160
>>> [   56.911552]  device_add+0x3a4/0x85c
>>> [   56.911678]  pci_device_add+0x308/0x660
>>> [   56.911803]  pci_scan_single_device+0xe4/0x114
>>> [   56.911937]  pci_scan_slot+0x70/0x1fc
>>> [   56.912039]  acpiphp_rescan_slot+0x90/0xa4
>>> [   56.912161]  acpiphp_hotplug_notify+0x2a8/0x300
>>> [   56.912290]  acpi_device_hotplug+0x138/0x4c0
>>> [   56.912428]  acpi_hotplug_work_fn+0x2c/0x4c
>>> [   56.912549]  process_one_work+0x1f4/0x460
>>> [   56.912679]  worker_thread+0x188/0x4e0
>>> [   56.912792]  kthread+0xe0/0xe4
>>> [   56.912892]  ret_from_fork+0x10/0x20
>>> [   56.913136] Code: f90002e0 52800000 17ffff97 f94002e0 (b9000040)
>>> [   56.913532] ---[ end trace 0000000000000000 ]---
>>>
>>>
>>> I'm wondering if we are using the same 
>>> ./pc-bios/edk2-aarch64-code.fd, although
>>> I can't see how it would cause such error.
>>
>> hmm actually I'm able to properly hotplug the network device using
>> the exactly
>> same sw stack as above (your branch, Debian 12, edk2) but running on
>> an arm64 host.
>>
>> It seems your running on a arm64 host since you're passing
>> --enable-kvm. Do you
>> mind trying it on a x86_64 or without --enable-kvm on the arm64 host?
>> I'm able to
>> reproduce it on arm64 host without --enable-kvm but not with
>> --enable-kvm passed to QEMU.
>
> What causes this behaviour is that the container size is < than the
> register region
> in the pcihp device:
>
> [...]
>     00000000090c0000-00000000090c0013 (prio 0, i/o): pcihp container
>       00000000090c0000-00000000090c0017 (prio 0, i/o): acpi-pci-hotplug
> [...]
>
> Because ACPI_PCI_HOTPLUG_REG_LEN and ACPI_PCIHP_SIZE values don't
> match. Please see my
> comment in patch 18/24 for a possible fix for it.

thank you very much for the investigation. This should be fixed in the
next version I am about the send ...

Eric
>
>
> Cheers,
> Gustavo
>


Reply via email to