From d0e2e420c9cc4f05f7c8c0ca5bfb09fa5263bb69 Mon Sep 17 00:00:00 2001 From: Romain Naour Date: Sat, 29 Jul 2023 00:53:54 +0200 Subject: [PATCH] support/testing: override the EDK2 CPU hotplug bug check In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves. EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402 (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them) The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0. https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3 http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html Fixes: https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186190 (TestGrubX8664EFI) https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186198 (TestGrubi386EFI) https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186306 (TestIso9660Grub2EFI) https://gitlab.com/buildroot.org/buildroot/-/jobs/4725186317 (TestIso9660Grub2Hybrid) Signed-off-by: Romain Naour Cc: Julien Olivain Signed-off-by: Thomas Petazzoni --- support/testing/tests/boot/test_grub.py | 20 ++++++++++++++++++-- support/testing/tests/fs/test_iso9660.py | 11 ++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/support/testing/tests/boot/test_grub.py b/support/testing/tests/boot/test_grub.py index 2c393f730e..9f3a6a8495 100644 --- a/support/testing/tests/boot/test_grub.py +++ b/support/testing/tests/boot/test_grub.py @@ -61,7 +61,15 @@ class TestGrubi386EFI(infra.basetest.BRTest): def test_run(self): hda = os.path.join(self.builddir, "images", "disk.img") bios = os.path.join(self.builddir, "images", "OVMF.fd") - self.emulator.boot(arch="i386", options=["-bios", bios, "-hda", hda]) + # In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves. + # EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402 + # (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them) + # The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround + # can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0. + # https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3 + # http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html + qemu_fw_cfg = "name=opt/org.tianocore/X-Cpuhp-Bugcheck-Override,string=yes" + self.emulator.boot(arch="i386", options=["-bios", bios, "-hda", hda, "-fw_cfg", qemu_fw_cfg]) self.emulator.login() cmd = "modprobe efivarfs" @@ -104,7 +112,15 @@ class TestGrubX8664EFI(infra.basetest.BRTest): def test_run(self): hda = os.path.join(self.builddir, "images", "disk.img") bios = os.path.join(self.builddir, "images", "OVMF.fd") - self.emulator.boot(arch="x86_64", options=["-bios", bios, "-hda", hda]) + # In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves. + # EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402 + # (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them) + # The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround + # can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0. + # https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3 + # http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html + qemu_fw_cfg = "name=opt/org.tianocore/X-Cpuhp-Bugcheck-Override,string=yes" + self.emulator.boot(arch="x86_64", options=["-bios", bios, "-hda", hda, "-fw_cfg", qemu_fw_cfg]) self.emulator.login() cmd = "modprobe efivarfs" diff --git a/support/testing/tests/fs/test_iso9660.py b/support/testing/tests/fs/test_iso9660.py index 692291267e..3d08f2e895 100644 --- a/support/testing/tests/fs/test_iso9660.py +++ b/support/testing/tests/fs/test_iso9660.py @@ -29,7 +29,16 @@ def test_mount_internal_external(emulator, builddir, internal=True, efi=False): img = os.path.join(builddir, "images", "rootfs.iso9660") if efi: efi_img = os.path.join(builddir, "images", "OVMF.fd") - emulator.boot(arch="i386", options=["-cdrom", img, "-bios", efi_img]) + # In QEMU v5.1.0 up to v7.2.0, the CPU hotplug register block misbehaves. + # EDK2 hang if the bug is detected in Qemu after printing errors to IO port 0x402 + # (requires BR2_TARGET_EDK2_OVMF_DEBUG_ON_SERIAL to see them) + # The Docker image used by the Buildroot gitlab-ci uses Qemu 5.2.0, the workaround + # can be removed as soon as the Docker image is updated to provided Qemu >= 8.0.0. + # This workaround is needed only when efi=True since it imply EDK2 is used. + # https://github.com/tianocore/edk2/commit/bf5678b5802685e07583e3c7ec56d883cbdd5da3 + # http://lists.busybox.net/pipermail/buildroot/2023-July/670825.html + qemu_fw_cfg = "name=opt/org.tianocore/X-Cpuhp-Bugcheck-Override,string=yes" + emulator.boot(arch="i386", options=["-cdrom", img, "-bios", efi_img, "-fw_cfg", qemu_fw_cfg]) else: emulator.boot(arch="i386", options=["-cdrom", img]) emulator.login()