Message ID | 20250509232156.106465-1-gustavo.romero@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tests/functional: Add PCI hotplug test for aarch64 | expand |
Hi! On 10/05/2025 01.19, Gustavo Romero wrote: > Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and > hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe > native controller and does not support ACPI-based hotplugging. However, > since support is planned, this test sets 'acpi=force' and specifies an > EDK2 firmware image in advance. This is harmless and prepares for future > ACPI support. > > Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> > --- > tests/functional/meson.build | 1 + > tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ > 2 files changed, 74 insertions(+) > create mode 100755 tests/functional/test_aarch64_hotplug_pci.py Could you also add the test file to one of the sections in the MAINTAINERS file, please? > diff --git a/tests/functional/test_aarch64_hotplug_pci.py b/tests/functional/test_aarch64_hotplug_pci.py > new file mode 100755 > index 0000000000..031540ba22 > --- /dev/null > +++ b/tests/functional/test_aarch64_hotplug_pci.py > @@ -0,0 +1,73 @@ > +#!/usr/bin/env python3 > +# > +# The test hotplugs a PCI device and checks it on a Linux guest. > +# > +# Copyright (c) 2025 Linaro Ltd. > +# > +# Author: > +# Gustavo Romero <gustavo.romero@linaro.org> > +# > +# This work is licensed under the terms of the GNU GPL, version 2 or > +# later. See the COPYING file in the top-level directory. > + > +from os import path > +from qemu_test import LinuxKernelTest, Asset, exec_command_and_wait_for_pattern > +from qemu_test import BUILD_DIR > + > +class HotplugPCI(LinuxKernelTest): > + > + ASSET_KERNEL = Asset( > + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' > + 'current/images/netboot/debian-installer/arm64/linux'), > + '3821d4db56d42c6a4eac62f31846e35465940afd87746b4cfcdf5c9eca3117b2') > + > + ASSET_INITRD = Asset( > + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' > + 'current/images/netboot/debian-installer/arm64/initrd.gz'), > + '2583ec22b45265ad69e82f198674f53d4cd85be124fe012eedc2fd91156bc4b4') > + > + def test_hotplug_pci(self): > + > + self.vm.add_args('-m', '512M') > + self.vm.add_args('-machine', 'type=virt') Please use self.set_machine('virt') instead so that the test gets correctly skipped in case the machine has not been compiled into the binary. Thanks, Thomas
Hi Thomas, Thanks for the review. On 5/12/25 04:59, Thomas Huth wrote: > Hi! > > On 10/05/2025 01.19, Gustavo Romero wrote: >> Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and >> hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe >> native controller and does not support ACPI-based hotplugging. However, >> since support is planned, this test sets 'acpi=force' and specifies an >> EDK2 firmware image in advance. This is harmless and prepares for future >> ACPI support. >> >> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> >> --- >> tests/functional/meson.build | 1 + >> tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ >> 2 files changed, 74 insertions(+) >> create mode 100755 tests/functional/test_aarch64_hotplug_pci.py > > Could you also add the test file to one of the sections in the MAINTAINERS file, please? Any idea under which section I should add this test? Currently, it's only TCG, but in the future probably there will be 1) a variant with --enable-kvm option and 2) it will have a variant with ACPI enabled. Hence, currently it doesn't seem to fit neither under "PCI" nor under "ARM ACPI Subsystem", I think I can create a section tho? Maybe "ARM PCI Hotplug"? Could you please advise? >> diff --git a/tests/functional/test_aarch64_hotplug_pci.py b/tests/functional/test_aarch64_hotplug_pci.py >> new file mode 100755 >> index 0000000000..031540ba22 >> --- /dev/null >> +++ b/tests/functional/test_aarch64_hotplug_pci.py >> @@ -0,0 +1,73 @@ >> +#!/usr/bin/env python3 >> +# >> +# The test hotplugs a PCI device and checks it on a Linux guest. >> +# >> +# Copyright (c) 2025 Linaro Ltd. >> +# >> +# Author: >> +# Gustavo Romero <gustavo.romero@linaro.org> >> +# >> +# This work is licensed under the terms of the GNU GPL, version 2 or >> +# later. See the COPYING file in the top-level directory. >> + >> +from os import path >> +from qemu_test import LinuxKernelTest, Asset, exec_command_and_wait_for_pattern >> +from qemu_test import BUILD_DIR >> + >> +class HotplugPCI(LinuxKernelTest): >> + >> + ASSET_KERNEL = Asset( >> + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' >> + 'current/images/netboot/debian-installer/arm64/linux'), >> + '3821d4db56d42c6a4eac62f31846e35465940afd87746b4cfcdf5c9eca3117b2') >> + >> + ASSET_INITRD = Asset( >> + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' >> + 'current/images/netboot/debian-installer/arm64/initrd.gz'), >> + '2583ec22b45265ad69e82f198674f53d4cd85be124fe012eedc2fd91156bc4b4') >> + >> + def test_hotplug_pci(self): >> + >> + self.vm.add_args('-m', '512M') >> + self.vm.add_args('-machine', 'type=virt') > > Please use self.set_machine('virt') instead so that the test gets correctly skipped in case the machine has not been compiled into the binary. Sure! Cheers, Gustavo
On 12/05/2025 14.08, Gustavo Romero wrote: > Hi Thomas, > > Thanks for the review. > > On 5/12/25 04:59, Thomas Huth wrote: >> Hi! >> >> On 10/05/2025 01.19, Gustavo Romero wrote: >>> Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and >>> hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe >>> native controller and does not support ACPI-based hotplugging. However, >>> since support is planned, this test sets 'acpi=force' and specifies an >>> EDK2 firmware image in advance. This is harmless and prepares for future >>> ACPI support. >>> >>> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> >>> --- >>> tests/functional/meson.build | 1 + >>> tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ >>> 2 files changed, 74 insertions(+) >>> create mode 100755 tests/functional/test_aarch64_hotplug_pci.py >> >> Could you also add the test file to one of the sections in the MAINTAINERS >> file, please? > > Any idea under which section I should add this test? > > Currently, it's only TCG, but in the future probably there will be > 1) a variant with --enable-kvm option and 2) it will have a variant > with ACPI enabled. Hence, currently it doesn't seem to fit neither > under "PCI" nor under "ARM ACPI Subsystem", I think I can create a > section tho? Maybe "ARM PCI Hotplug"? Could you please advise? A separate section likely only makes sense if there are other files that you could add there. Otherwise, simply add it to the arm "Virt" machine section? Thomas
Hi Thomas, On 5/12/25 09:08, Gustavo Romero wrote: > Hi Thomas, > > Thanks for the review. > > On 5/12/25 04:59, Thomas Huth wrote: >> Hi! >> >> On 10/05/2025 01.19, Gustavo Romero wrote: >>> Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and >>> hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe >>> native controller and does not support ACPI-based hotplugging. However, >>> since support is planned, this test sets 'acpi=force' and specifies an >>> EDK2 firmware image in advance. This is harmless and prepares for future >>> ACPI support. >>> >>> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> >>> --- >>> tests/functional/meson.build | 1 + >>> tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ >>> 2 files changed, 74 insertions(+) >>> create mode 100755 tests/functional/test_aarch64_hotplug_pci.py >> >> Could you also add the test file to one of the sections in the MAINTAINERS file, please? > > Any idea under which section I should add this test? > > Currently, it's only TCG, but in the future probably there will be > 1) a variant with --enable-kvm option and 2) it will have a variant > with ACPI enabled. Hence, currently it doesn't seem to fit neither > under "PCI" nor under "ARM ACPI Subsystem", I think I can create a > section tho? Maybe "ARM PCI Hotplug"? Could you please advise? Well, I'll introduce all these variants into the test so I created a new section "ARM PCI Hotplug" and added me as the maintainer. When I introduce the variants I can change the section name to fit it better. I just sent a v2. Cheers, Gustavo
Hi Thomas, On 5/12/25 09:37, Thomas Huth wrote: > On 12/05/2025 14.08, Gustavo Romero wrote: >> Hi Thomas, >> >> Thanks for the review. >> >> On 5/12/25 04:59, Thomas Huth wrote: >>> Hi! >>> >>> On 10/05/2025 01.19, Gustavo Romero wrote: >>>> Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and >>>> hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe >>>> native controller and does not support ACPI-based hotplugging. However, >>>> since support is planned, this test sets 'acpi=force' and specifies an >>>> EDK2 firmware image in advance. This is harmless and prepares for future >>>> ACPI support. >>>> >>>> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> >>>> --- >>>> tests/functional/meson.build | 1 + >>>> tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ >>>> 2 files changed, 74 insertions(+) >>>> create mode 100755 tests/functional/test_aarch64_hotplug_pci.py >>> >>> Could you also add the test file to one of the sections in the MAINTAINERS file, please? >> >> Any idea under which section I should add this test? >> >> Currently, it's only TCG, but in the future probably there will be >> 1) a variant with --enable-kvm option and 2) it will have a variant >> with ACPI enabled. Hence, currently it doesn't seem to fit neither >> under "PCI" nor under "ARM ACPI Subsystem", I think I can create a >> section tho? Maybe "ARM PCI Hotplug"? Could you please advise? > > A separate section likely only makes sense if there are other files that you could add there. Otherwise, simply add it to the arm "Virt" machine section? hm but in this case wouldn't I be kind "forcing" Peter to maintain this test? And, otoh, if I add me to "Virt" section then I'm saying that I'll maintain all the other tests as well? Cheers, Gustavo
On 12/05/2025 14.46, Gustavo Romero wrote: > Hi Thomas, > > On 5/12/25 09:37, Thomas Huth wrote: >> On 12/05/2025 14.08, Gustavo Romero wrote: >>> Hi Thomas, >>> >>> Thanks for the review. >>> >>> On 5/12/25 04:59, Thomas Huth wrote: >>>> Hi! >>>> >>>> On 10/05/2025 01.19, Gustavo Romero wrote: >>>>> Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and >>>>> hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe >>>>> native controller and does not support ACPI-based hotplugging. However, >>>>> since support is planned, this test sets 'acpi=force' and specifies an >>>>> EDK2 firmware image in advance. This is harmless and prepares for future >>>>> ACPI support. >>>>> >>>>> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> >>>>> --- >>>>> tests/functional/meson.build | 1 + >>>>> tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ >>>>> 2 files changed, 74 insertions(+) >>>>> create mode 100755 tests/functional/test_aarch64_hotplug_pci.py >>>> >>>> Could you also add the test file to one of the sections in the >>>> MAINTAINERS file, please? >>> >>> Any idea under which section I should add this test? >>> >>> Currently, it's only TCG, but in the future probably there will be >>> 1) a variant with --enable-kvm option and 2) it will have a variant >>> with ACPI enabled. Hence, currently it doesn't seem to fit neither >>> under "PCI" nor under "ARM ACPI Subsystem", I think I can create a >>> section tho? Maybe "ARM PCI Hotplug"? Could you please advise? >> >> A separate section likely only makes sense if there are other files that >> you could add there. Otherwise, simply add it to the arm "Virt" machine >> section? > > hm but in this case wouldn't I be kind "forcing" Peter to maintain > this test? And, otoh, if I add me to "Virt" section then I'm saying that > I'll maintain all the other tests as well? Ok, in that case a separate section makes sense ... Peter, do you have any preferences? Thomas
diff --git a/tests/functional/meson.build b/tests/functional/meson.build index 52b4706cfe..2d68840fa2 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -83,6 +83,7 @@ tests_aarch64_system_quick = [ tests_aarch64_system_thorough = [ 'aarch64_aspeed_ast2700', 'aarch64_aspeed_ast2700fc', + 'aarch64_hotplug_pci', 'aarch64_imx8mp_evk', 'aarch64_raspi3', 'aarch64_raspi4', diff --git a/tests/functional/test_aarch64_hotplug_pci.py b/tests/functional/test_aarch64_hotplug_pci.py new file mode 100755 index 0000000000..031540ba22 --- /dev/null +++ b/tests/functional/test_aarch64_hotplug_pci.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# +# The test hotplugs a PCI device and checks it on a Linux guest. +# +# Copyright (c) 2025 Linaro Ltd. +# +# Author: +# Gustavo Romero <gustavo.romero@linaro.org> +# +# This work is licensed under the terms of the GNU GPL, version 2 or +# later. See the COPYING file in the top-level directory. + +from os import path +from qemu_test import LinuxKernelTest, Asset, exec_command_and_wait_for_pattern +from qemu_test import BUILD_DIR + +class HotplugPCI(LinuxKernelTest): + + ASSET_KERNEL = Asset( + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' + 'current/images/netboot/debian-installer/arm64/linux'), + '3821d4db56d42c6a4eac62f31846e35465940afd87746b4cfcdf5c9eca3117b2') + + ASSET_INITRD = Asset( + ('https://ftp.debian.org/debian/dists/stable/main/installer-arm64/' + 'current/images/netboot/debian-installer/arm64/initrd.gz'), + '2583ec22b45265ad69e82f198674f53d4cd85be124fe012eedc2fd91156bc4b4') + + def test_hotplug_pci(self): + + self.vm.add_args('-m', '512M') + self.vm.add_args('-machine', 'type=virt') + self.vm.add_args('-cpu', 'cortex-a57') + self.vm.add_args('-append', + 'console=ttyAMA0,115200 acpi=force init=/bin/sh') + self.vm.add_args('-device', + 'pcie-root-port,bus=pcie.0,chassis=1,slot=1,id=pcie.1') + self.vm.add_args('-bios', path.join(BUILD_DIR, 'pc-bios', + 'edk2-aarch64-code.fd')) + + # BusyBox prompt + prompt = "~ #" + self.launch_kernel(self.ASSET_KERNEL.fetch(), + self.ASSET_INITRD.fetch(), + wait_for=prompt) + + # Check for initial state: 2 network adapters, lo and enp0s1. + exec_command_and_wait_for_pattern(self, + 'ls -l /sys/class/net | wc -l', + '2') + + # Hotplug one network adapter to the root port, i.e. pcie.1 bus. + self.vm.cmd('device_add', + driver='virtio-net-pci', + bus='pcie.1', + addr=0, + id='na') + # Wait for the kernel to recognize the new device. + self.wait_for_console_pattern('virtio-pci') + self.wait_for_console_pattern('virtio_net') + + # Check if there is a new network adapter. + exec_command_and_wait_for_pattern(self, + 'ls -l /sys/class/net | wc -l', + '3') + + self.vm.cmd('device_del', id='na') + exec_command_and_wait_for_pattern(self, + 'ls -l /sys/class/net | wc -l', + '2') + +if __name__ == '__main__': + LinuxKernelTest.main()
Add a functional test, aarch64_hotplug_pci, to exercise PCI hotplug and hot-unplug on arm64. Currently, the aarch64 'virt' machine uses the PCIe native controller and does not support ACPI-based hotplugging. However, since support is planned, this test sets 'acpi=force' and specifies an EDK2 firmware image in advance. This is harmless and prepares for future ACPI support. Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org> --- tests/functional/meson.build | 1 + tests/functional/test_aarch64_hotplug_pci.py | 73 ++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100755 tests/functional/test_aarch64_hotplug_pci.py