qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL for 10.1-rc1 00/14] documentation an testing updates
@ 2025-07-27  8:32 Alex Bennée
  2025-07-27  8:32 ` [PULL 01/14] docs/user: clarify user-mode expects the same OS Alex Bennée
                   ` (14 more replies)
  0 siblings, 15 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée

The following changes since commit c017386f28c03a03b8f14444f8671d3d8f7180fe:

  Merge tag 'pull-target-arm-20250725' of https://gitlab.com/pm215/qemu into staging (2025-07-25 08:24:52 -0400)

are available in the Git repository at:

  https://gitlab.com/stsquad/qemu.git tags/pull-10.1-rc1-maintainer-260725-1

for you to fetch changes up to cac08383f06dc378afb23913d65a95442bbd5516:

  tests/functional: expose sys.argv to unittest.main (2025-07-26 23:04:35 +0100)

----------------------------------------------------------------
documentation and test cleanups

  - improve clarity of user-mode docs
  - remove reference to TAP tarball
  - add new hypervisor test for aarch64 EL2
  - reduce combinatorial explosion of plugin tests
  - make docker-all-test-cross more friendly to non-x86 hosts
  - expose unittests to sysv.args for embedded help

----------------------------------------------------------------
Alex Bennée (14):
      docs/user: clarify user-mode expects the same OS
      docs/system: reword the TAP notes to remove tarball ref
      docs/user: clean up headings
      docs/user: slightly reword section on system calls
      docs/user: expand section on threading
      tests/functional: add hypervisor test for aarch64
      tests/tcg: skip libsyscall.so on softmmu tests
      tests/tcg: remove ADDITIONAL_PLUGINS_TESTS
      tests/tcg: don't include multiarch tests if not supported
      configure: expose PYTHON to test/tcg/config-host.mak
      tests/tcg: reduce the number of plugin tests combinations
      tests/docker: add --arch-only to qemu deps for all-test-cross
      tests/docker: handle host-arch selection for all-test-cross
      tests/functional: expose sys.argv to unittest.main

 docs/system/devices/net.rst                        | 16 +++--
 docs/user/index.rst                                |  5 +-
 docs/user/main.rst                                 | 60 +++++++++++-------
 configure                                          |  1 +
 .../dockerfiles/debian-all-test-cross.docker       | 34 ++++++-----
 tests/functional/meson.build                       |  1 +
 tests/functional/qemu_test/testcase.py             |  2 +-
 tests/functional/test_aarch64_kvm.py               | 71 ++++++++++++++++++++++
 tests/tcg/Makefile.target                          | 36 ++++++++---
 tests/tcg/multiarch/Makefile.target                |  8 ++-
 tests/tcg/multiarch/system/Makefile.softmmu-target | 16 +++--
 11 files changed, 192 insertions(+), 58 deletions(-)
 create mode 100755 tests/functional/test_aarch64_kvm.py

-- 
2.47.2



^ permalink raw reply	[flat|nested] 28+ messages in thread

* [PULL 01/14] docs/user: clarify user-mode expects the same OS
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 02/14] docs/system: reword the TAP notes to remove tarball ref Alex Bennée
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Manos Pitsidianakis

While we somewhat cover this later when we talk about supported
operating systems make it clear in the front matter.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-2-alex.bennee@linaro.org>

diff --git a/docs/user/index.rst b/docs/user/index.rst
index 782d27cda27..2307580cb97 100644
--- a/docs/user/index.rst
+++ b/docs/user/index.rst
@@ -5,8 +5,9 @@ User Mode Emulation
 -------------------
 
 This section of the manual is the overall guide for users using QEMU
-for user-mode emulation.  In this mode, QEMU can launch
-processes compiled for one CPU on another CPU.
+for user-mode emulation. In this mode, QEMU can launch programs
+compiled for one CPU architecture on the same Operating System (OS)
+but running on a different CPU architecture.
 
 .. toctree::
    :maxdepth: 2
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 02/14] docs/system: reword the TAP notes to remove tarball ref
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
  2025-07-27  8:32 ` [PULL 01/14] docs/user: clarify user-mode expects the same OS Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 03/14] docs/user: clean up headings Alex Bennée
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Manos Pitsidianakis

We don't ship the tarball and users should generally look to the
distribution specific packaging.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/560
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-3-alex.bennee@linaro.org>

diff --git a/docs/system/devices/net.rst b/docs/system/devices/net.rst
index 4d787c3aeb0..7d76fe88c45 100644
--- a/docs/system/devices/net.rst
+++ b/docs/system/devices/net.rst
@@ -21,11 +21,17 @@ configure it as if it was a real ethernet card.
 Linux host
 ^^^^^^^^^^
 
-As an example, you can download the ``linux-test-xxx.tar.gz`` archive
-and copy the script ``qemu-ifup`` in ``/etc`` and configure properly
-``sudo`` so that the command ``ifconfig`` contained in ``qemu-ifup`` can
-be executed as root. You must verify that your host kernel supports the
-TAP network interfaces: the device ``/dev/net/tun`` must be present.
+A distribution will generally provide specific helper scripts when it
+packages QEMU. By default these are found at ``/etc/qemu-ifup`` and
+``/etc/qemu-ifdown`` and are called appropriately when QEMU wants to
+change the network state.
+
+If QEMU is being run as a non-privileged user you may need properly
+configure ``sudo`` so that network commands in the scripts can be
+executed as root.
+
+You must verify that your host kernel supports the TAP network
+interfaces: the device ``/dev/net/tun`` must be present.
 
 See :ref:`sec_005finvocation` to have examples of command
 lines using the TAP network interfaces.
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 03/14] docs/user: clean up headings
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
  2025-07-27  8:32 ` [PULL 01/14] docs/user: clarify user-mode expects the same OS Alex Bennée
  2025-07-27  8:32 ` [PULL 02/14] docs/system: reword the TAP notes to remove tarball ref Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 04/14] docs/user: slightly reword section on system calls Alex Bennée
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Manos Pitsidianakis, Richard Henderson

This was a slightly duff format for rst, make it use proper headings.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-4-alex.bennee@linaro.org>

diff --git a/docs/user/main.rst b/docs/user/main.rst
index 9a1c60448c5..b8ff203c212 100644
--- a/docs/user/main.rst
+++ b/docs/user/main.rst
@@ -17,28 +17,34 @@ Features
 
 QEMU user space emulation has the following notable features:
 
-**System call translation:**
-   QEMU includes a generic system call translator. This means that the
-   parameters of the system calls can be converted to fix endianness and
-   32/64-bit mismatches between hosts and targets. IOCTLs can be
-   converted too.
-
-**POSIX signal handling:**
-   QEMU can redirect to the running program all signals coming from the
-   host (such as ``SIGALRM``), as well as synthesize signals from
-   virtual CPU exceptions (for example ``SIGFPE`` when the program
-   executes a division by zero).
-
-   QEMU relies on the host kernel to emulate most signal system calls,
-   for example to emulate the signal mask. On Linux, QEMU supports both
-   normal and real-time signals.
-
-**Threading:**
-   On Linux, QEMU can emulate the ``clone`` syscall and create a real
-   host thread (with a separate virtual CPU) for each emulated thread.
-   Note that not all targets currently emulate atomic operations
-   correctly. x86 and Arm use a global lock in order to preserve their
-   semantics.
+System call translation
+~~~~~~~~~~~~~~~~~~~~~~~
+
+QEMU includes a generic system call translator. This means that the
+parameters of the system calls can be converted to fix endianness
+and 32/64-bit mismatches between hosts and targets. IOCTLs can be
+converted too.
+
+POSIX signal handling
+~~~~~~~~~~~~~~~~~~~~~
+
+QEMU can redirect to the running program all signals coming from the
+host (such as ``SIGALRM``), as well as synthesize signals from
+virtual CPU exceptions (for example ``SIGFPE`` when the program
+executes a division by zero).
+
+QEMU relies on the host kernel to emulate most signal system calls,
+for example to emulate the signal mask. On Linux, QEMU supports both
+normal and real-time signals.
+
+Threading
+~~~~~~~~~
+
+On Linux, QEMU can emulate the ``clone`` syscall and create a real
+host thread (with a separate virtual CPU) for each emulated thread.
+Note that not all targets currently emulate atomic operations
+correctly. x86 and Arm use a global lock in order to preserve their
+semantics.
 
 QEMU was conceived so that ultimately it can emulate itself. Although it
 is not very useful, it is an important test to show the power of the
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 04/14] docs/user: slightly reword section on system calls
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (2 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 03/14] docs/user: clean up headings Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 05/14] docs/user: expand section on threading Alex Bennée
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Manos Pitsidianakis

Expand the description slightly and quote ioctl(). I did ponder
mentioning something about why DRM ioctls are often missing but I see
we have the I915 ones so I guess its just no one has done them.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-5-alex.bennee@linaro.org>

diff --git a/docs/user/main.rst b/docs/user/main.rst
index b8ff203c212..05de904225c 100644
--- a/docs/user/main.rst
+++ b/docs/user/main.rst
@@ -20,10 +20,14 @@ QEMU user space emulation has the following notable features:
 System call translation
 ~~~~~~~~~~~~~~~~~~~~~~~
 
-QEMU includes a generic system call translator. This means that the
-parameters of the system calls can be converted to fix endianness
-and 32/64-bit mismatches between hosts and targets. IOCTLs can be
-converted too.
+System calls are the principle interface between user-space and the
+kernel. Generally the same system calls exist on all versions of the
+kernel so QEMU includes a generic system call translator. The
+translator takes care of adjusting endianess, 32/64 bit parameter size
+and then calling the equivalent host system call.
+
+QEMU can also adjust device specific ``ioctl()`` calls in a similar
+fashion.
 
 POSIX signal handling
 ~~~~~~~~~~~~~~~~~~~~~
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 05/14] docs/user: expand section on threading
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (3 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 04/14] docs/user: slightly reword section on system calls Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 06/14] tests/functional: add hypervisor test for aarch64 Alex Bennée
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Richard Henderson

Potentially too many weasel words when describing atomic and memory
order issues.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-6-alex.bennee@linaro.org>

diff --git a/docs/user/main.rst b/docs/user/main.rst
index 05de904225c..347bdfabf8c 100644
--- a/docs/user/main.rst
+++ b/docs/user/main.rst
@@ -46,9 +46,15 @@ Threading
 
 On Linux, QEMU can emulate the ``clone`` syscall and create a real
 host thread (with a separate virtual CPU) for each emulated thread.
-Note that not all targets currently emulate atomic operations
-correctly. x86 and Arm use a global lock in order to preserve their
-semantics.
+However as QEMU relies on the system libc to call ``clone`` on its
+behalf we limit the flags accepted to those it uses. Specifically this
+means flags affecting namespaces (e.g. container runtimes) are not
+supported. QEMU user-mode processes can still be run inside containers
+though.
+
+While QEMU does its best to emulate atomic operations properly
+differences between the host and guest memory models can cause issues
+for software that makes assumptions about the memory model.
 
 QEMU was conceived so that ultimately it can emulate itself. Although it
 is not very useful, it is an important test to show the power of the
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 06/14] tests/functional: add hypervisor test for aarch64
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (4 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 05/14] docs/user: expand section on threading Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-08-13  7:27   ` Philippe Mathieu-Daudé
  2025-07-27  8:32 ` [PULL 07/14] tests/tcg: skip libsyscall.so on softmmu tests Alex Bennée
                   ` (8 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Philippe Mathieu-Daudé,
	Manos Pitsidianakis

This is a simple test case that runs an image with kvmtool and
kvm-unit-tests which can validate virtualisation works. This is useful
for exercising TCG but can also be applied to any nested virt setup
which is why it doesn't specify an accelerator.

Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-7-alex.bennee@linaro.org>

diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index 8bebcd4d94e..ecf965adc6c 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -89,6 +89,7 @@ tests_aarch64_system_thorough = [
   'aarch64_device_passthrough',
   'aarch64_hotplug_pci',
   'aarch64_imx8mp_evk',
+  'aarch64_kvm',
   'aarch64_raspi3',
   'aarch64_raspi4',
   'aarch64_replay',
diff --git a/tests/functional/test_aarch64_kvm.py b/tests/functional/test_aarch64_kvm.py
new file mode 100755
index 00000000000..9fb9286139f
--- /dev/null
+++ b/tests/functional/test_aarch64_kvm.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+#
+# Functional test that runs subsets of kvm-unit-tests on Aarch64.
+# These can run on TCG and any accelerator supporting nested
+# virtualisation.
+#
+# Copyright (c) 2025 Linaro
+#
+# Author:
+#  Alex Bennée <alex.bennee@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import Asset
+from qemu_test import exec_command_and_wait_for_pattern as ec_and_wait
+from qemu_test.linuxkernel import LinuxKernelTest
+
+
+class Aarch64VirtKVMTests(LinuxKernelTest):
+
+    ASSET_KVM_TEST_KERNEL = Asset(
+        'https://fileserver.linaro.org/s/HmjaxXXYHYSqbes/'
+        'download?path=%2F&files='
+        'image-with-kvm-tool-and-unit-tests.gz',
+        '34de4aaea90db5da42729e7d28b77f392c37a2f4da859f889a5234aaf0970696')
+
+    # make it easier to detect successful return to shell
+    PS1 = 'RES=[$?] # '
+    OK_CMD = 'RES=[0] # '
+
+    # base of tests
+    KUT_BASE = "/usr/share/kvm-unit-tests/"
+
+    def _launch_guest(self, kvm_mode="nvhe"):
+
+        self.set_machine('virt')
+        kernel_path = self.ASSET_KVM_TEST_KERNEL.fetch()
+
+        self.vm.set_console()
+        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+                               f"console=ttyAMA0 kvm-arm.mode={kvm_mode}")
+
+        self.vm.add_args("-cpu", "cortex-a72")
+        self.vm.add_args("-machine", "virt,gic-version=3,virtualization=on",
+                         '-kernel', kernel_path,
+                         '-append', kernel_command_line)
+        self.vm.add_args("-smp", "2", "-m", "320")
+
+        self.vm.launch()
+
+        self.wait_for_console_pattern('buildroot login:')
+        ec_and_wait(self, 'root', '#')
+        ec_and_wait(self, f"export PS1='{self.PS1}'", self.OK_CMD)
+
+    # this is just a smoketest, we don't run all the tests in the image
+    def _smoketest_kvm(self):
+        ec_and_wait(self, f"{self.KUT_BASE}/selftest-setup", self.OK_CMD)
+        ec_and_wait(self, f"{self.KUT_BASE}/selftest-smp", self.OK_CMD)
+        ec_and_wait(self, f"{self.KUT_BASE}/selftest-vectors-kernel", self.OK_CMD)
+        ec_and_wait(self, f"{self.KUT_BASE}/selftest-vectors-user", self.OK_CMD)
+
+    def test_aarch64_nvhe_selftest(self):
+        self._launch_guest("nvhe")
+        self._smoketest_kvm()
+
+    def test_aarch64_vhe_selftest(self):
+        self._launch_guest("vhe")
+        self._smoketest_kvm()
+
+if __name__ == '__main__':
+    LinuxKernelTest.main()
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 07/14] tests/tcg: skip libsyscall.so on softmmu tests
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (5 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 06/14] tests/functional: add hypervisor test for aarch64 Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 08/14] tests/tcg: remove ADDITIONAL_PLUGINS_TESTS Alex Bennée
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé

It isn't testing anything and just expanding the runtime of testing.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-8-alex.bennee@linaro.org>

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index af68f11664f..3d96182a7b9 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -155,6 +155,12 @@ VPATH+=$(PLUGIN_LIB)
 # For example, libpatch.so only needs to run against the arch-specific patch
 # target test, so we explicitly run it in the arch-specific Makefile.
 DISABLE_PLUGINS=libpatch.so
+
+# Likewise don't bother with the syscall plugin for softmmu
+ifneq ($(filter %-softmmu, $(TARGET)),)
+DISABLE_PLUGINS += libsyscall.so
+endif
+
 PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
 	$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c))))
 
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 08/14] tests/tcg: remove ADDITIONAL_PLUGINS_TESTS
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (6 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 07/14] tests/tcg: skip libsyscall.so on softmmu tests Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 09/14] tests/tcg: don't include multiarch tests if not supported Alex Bennée
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé

We never actually used this is the end. Remove it to enable
re-factoring.

Fixes: 7cefff22d54 (tests/tcg: add mechanism to run specific tests with plugins)
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-9-alex.bennee@linaro.org>

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index 3d96182a7b9..97ebe8f9bc9 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -169,11 +169,10 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
 # only expand MULTIARCH_TESTS which are common on most of our targets
 # to avoid an exponential explosion as new tests are added. We also
 # add some special helpers the run-plugin- rules can use below.
-# In more, extra tests can be added using ADDITIONAL_PLUGINS_TESTS variable.
 
 ifneq ($(MULTIARCH_TESTS),)
 $(foreach p,$(PLUGINS), \
-	$(foreach t,$(MULTIARCH_TESTS) $(ADDITIONAL_PLUGINS_TESTS),\
+	$(foreach t,$(MULTIARCH_TESTS),\
 		$(eval run-plugin-$(t)-with-$(p): $t $p) \
 		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
 endif # MULTIARCH_TESTS
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 09/14] tests/tcg: don't include multiarch tests if not supported
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (7 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 08/14] tests/tcg: remove ADDITIONAL_PLUGINS_TESTS Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 10/14] configure: expose PYTHON to test/tcg/config-host.mak Alex Bennée
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé

We are about to change the way the plugin runs are done and having
this included by default will complicate things.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-10-alex.bennee@linaro.org>

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index 97ebe8f9bc9..a12b15637ea 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -127,8 +127,14 @@ else
 # build options for bare programs are usually pretty different. They
 # are expected to provide their own build recipes.
 EXTRA_CFLAGS += -ffreestanding -fno-stack-protector
+
+# We skip the multiarch tests if the target hasn't provided a boot.S
+MULTIARCH_SOFTMMU_TARGETS = i386 alpha aarch64 arm loongarch64 s390x x86_64
+
+ifneq ($(filter $(TARGET_NAME),$(MULTIARCH_SOFTMMU_TARGETS)),)
 -include $(SRC_PATH)/tests/tcg/minilib/Makefile.target
 -include $(SRC_PATH)/tests/tcg/multiarch/system/Makefile.softmmu-target
+endif
 -include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.softmmu-target
 
 endif
diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
index 07be001102b..5acf2700812 100644
--- a/tests/tcg/multiarch/system/Makefile.softmmu-target
+++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
@@ -6,6 +6,11 @@
 # architecture to add to the test dependencies and deal with the
 # complications of building.
 #
+# To support the multiarch guests the target arch needs to provide a
+# boot.S that jumps to main and provides a __sys_outc functions.
+# Remember to update MULTIARCH_SOFTMMU_TARGETS in the tcg test
+# Makefile.target when this is done.
+#
 
 MULTIARCH_SRC=$(SRC_PATH)/tests/tcg/multiarch
 MULTIARCH_SYSTEM_SRC=$(MULTIARCH_SRC)/system
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 10/14] configure: expose PYTHON to test/tcg/config-host.mak
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (8 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 09/14] tests/tcg: don't include multiarch tests if not supported Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations Alex Bennée
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis, Paolo Bonzini, Thomas Huth

This will be useful for making $shell calls to something more flexible
than the shell builtins.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-11-alex.bennee@linaro.org>

diff --git a/configure b/configure
index 95f67c1a827..825057ebf15 100755
--- a/configure
+++ b/configure
@@ -1800,6 +1800,7 @@ echo "SRC_PATH=$source_path" >> tests/tcg/$config_host_mak
 if test "$plugins" = "yes" ; then
     echo "CONFIG_PLUGIN=y" >> tests/tcg/$config_host_mak
 fi
+echo "PYTHON=$python" >> tests/tcg/$config_host_mak
 
 tcg_tests_targets=
 for target in $target_list; do
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (9 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 10/14] configure: expose PYTHON to test/tcg/config-host.mak Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-28 19:03   ` Pierrick Bouvier
  2025-07-27  8:32 ` [PULL 12/14] tests/docker: add --arch-only to qemu deps for all-test-cross Alex Bennée
                   ` (3 subsequent siblings)
  14 siblings, 1 reply; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé

As our set of multiarch tests has grown the practice of running every
plugin with every test is becoming unsustainable. If we switch to
ensuring every test gets run with at least one plugin we can speed
things up.

Some plugins do need to be run with specific tests (for example the
memory instrumentation test). We can handle this by manually adding
them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
so we don't enable the runs when plugins are not enabled.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index a12b15637ea..18afd5be194 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
 # We need to ensure expand the run-plugin-TEST-with-PLUGIN
 # pre-requistes manually here as we can't use stems to handle it. We
 # only expand MULTIARCH_TESTS which are common on most of our targets
-# to avoid an exponential explosion as new tests are added. We also
-# add some special helpers the run-plugin- rules can use below.
+# and rotate the plugins so we don't grow too out of control as new
+# tests are added. Plugins that need to run with a specific test
+# should ensure they add their combination to EXTRA_RUNS.
 
 ifneq ($(MULTIARCH_TESTS),)
-$(foreach p,$(PLUGINS), \
-	$(foreach t,$(MULTIARCH_TESTS),\
-		$(eval run-plugin-$(t)-with-$(p): $t $p) \
-		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
+
+NUM_PLUGINS := $(words $(PLUGINS))
+NUM_TESTS := $(words $(MULTIARCH_TESTS))
+
+define mod_plus_one
+  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
+endef
+
+$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
+	$(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
+	$(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
+	$(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
+	$(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
+
 endif # MULTIARCH_TESTS
 endif # CONFIG_PLUGIN
 
diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
index bfdf7197a7b..38345ff8805 100644
--- a/tests/tcg/multiarch/Makefile.target
+++ b/tests/tcg/multiarch/Makefile.target
@@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
 TESTS += semihosting semiconsole
 endif
 
+test-plugin-mem-access: CFLAGS+=-pthread -O0
+test-plugin-mem-access: LDFLAGS+=-pthread -O0
+
+ifeq ($(CONFIG_PLUGIN),y)
 # Test plugin memory access instrumentation
 run-plugin-test-plugin-mem-access-with-libmem.so: \
 	PLUGIN_ARGS=$(COMMA)print-accesses=true
@@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
 	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
 	$(QEMU) $<
 
-test-plugin-mem-access: CFLAGS+=-pthread -O0
-test-plugin-mem-access: LDFLAGS+=-pthread -O0
+EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
+endif
 
 # Update TESTS
 TESTS += $(MULTIARCH_TESTS)
diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
index 5acf2700812..4171b4e6aa0 100644
--- a/tests/tcg/multiarch/system/Makefile.softmmu-target
+++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
@@ -71,8 +71,11 @@ endif
 MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
 	run-gdbstub-untimely-packet run-gdbstub-registers
 
+ifeq ($(CONFIG_PLUGIN),y)
 # Test plugin memory access instrumentation
-run-plugin-memory-with-libmem.so: 		\
-	PLUGIN_ARGS=$(COMMA)region-summary=true
-run-plugin-memory-with-libmem.so: 		\
-	CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
+run-plugin-memory-with-libmem.so: memory libmem.so
+run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
+run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
+
+EXTRA_RUNS += run-plugin-memory-with-libmem.so
+endif
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 12/14] tests/docker: add --arch-only to qemu deps for all-test-cross
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (10 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 13/14] tests/docker: handle host-arch selection " Alex Bennée
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé, Thomas Huth

If we want to build this container on non-x86 systems we might not
have all the cross-compilers needed for the ROM blobs we don't
actually build. Use --arch-only to avoid stalling on these missing
bits.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-13-alex.bennee@linaro.org>

diff --git a/tests/docker/dockerfiles/debian-all-test-cross.docker b/tests/docker/dockerfiles/debian-all-test-cross.docker
index 8ab244e018a..5aa43749ebe 100644
--- a/tests/docker/dockerfiles/debian-all-test-cross.docker
+++ b/tests/docker/dockerfiles/debian-all-test-cross.docker
@@ -15,7 +15,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
     apt-get update && \
     apt-get install -y eatmydata && \
     eatmydata apt-get dist-upgrade -y && \
-    apt build-dep -yy qemu
+    apt build-dep -yy --arch-only qemu
 
 # Add extra build tools and as many cross compilers as we can for testing
 RUN DEBIAN_FRONTEND=noninteractive eatmydata \
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 13/14] tests/docker: handle host-arch selection for all-test-cross
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (11 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 12/14] tests/docker: add --arch-only to qemu deps for all-test-cross Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-27  8:32 ` [PULL 14/14] tests/functional: expose sys.argv to unittest.main Alex Bennée
  2025-07-28 15:20 ` [PULL for 10.1-rc1 00/14] documentation an testing updates Stefan Hajnoczi
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Manos Pitsidianakis,
	Philippe Mathieu-Daudé, Thomas Huth

When building on non-x86 we get a bunch but not all of the compilers.
Handle this in the Dockerfile by probing the arch and expanding the
list available.

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-14-alex.bennee@linaro.org>

diff --git a/tests/docker/dockerfiles/debian-all-test-cross.docker b/tests/docker/dockerfiles/debian-all-test-cross.docker
index 5aa43749ebe..ef69bbc8a51 100644
--- a/tests/docker/dockerfiles/debian-all-test-cross.docker
+++ b/tests/docker/dockerfiles/debian-all-test-cross.docker
@@ -23,7 +23,9 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
         bison \
         ccache \
         clang  \
+        dpkg-dev \
         flex \
+        gcc \
         git \
         libclang-rt-dev \
         ninja-build \
@@ -33,16 +35,11 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
         python3-venv \
         python3-wheel
 
-RUN DEBIAN_FRONTEND=noninteractive eatmydata \
-        apt install -y --no-install-recommends \
-        gcc-aarch64-linux-gnu \
+# All the generally available compilers
+ENV AVAILABLE_COMPILERS gcc-aarch64-linux-gnu \
         libc6-dev-arm64-cross \
         gcc-arm-linux-gnueabihf \
         libc6-dev-armhf-cross \
-        gcc-hppa-linux-gnu \
-        libc6-dev-hppa-cross \
-        gcc-m68k-linux-gnu \
-        libc6-dev-m68k-cross \
         gcc-mips-linux-gnu \
         libc6-dev-mips-cross \
         gcc-mips64-linux-gnuabi64 \
@@ -51,18 +48,25 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
         libc6-dev-mips64el-cross \
         gcc-mipsel-linux-gnu \
         libc6-dev-mipsel-cross \
-        gcc-powerpc-linux-gnu \
-        libc6-dev-powerpc-cross \
-        gcc-powerpc64-linux-gnu \
-        libc6-dev-ppc64-cross \
         gcc-powerpc64le-linux-gnu \
         libc6-dev-ppc64el-cross \
         gcc-riscv64-linux-gnu \
         libc6-dev-riscv64-cross \
         gcc-s390x-linux-gnu \
-        libc6-dev-s390x-cross \
-        gcc-sparc64-linux-gnu \
-        libc6-dev-sparc64-cross && \
+        libc6-dev-s390x-cross
+
+RUN if dpkg-architecture -e amd64; then \
+  export AVAILABLE_COMPILERS="${AVAILABLE_COMPILERS} gcc-hppa-linux-gnu libc6-dev-hppa-cross"; \
+  export AVAILABLE_COMPILERS="${AVAILABLE_COMPILERS} gcc-m68k-linux-gnu libc6-dev-m68k-cross"; \
+  export AVAILABLE_COMPILERS="${AVAILABLE_COMPILERS} gcc-powerpc-linux-gnu libc6-dev-powerpc-cross"; \
+  export AVAILABLE_COMPILERS="${AVAILABLE_COMPILERS} gcc-powerpc64-linux-gnu libc6-dev-ppc64-cross"; \
+  export AVAILABLE_COMPILERS="${AVAILABLE_COMPILERS} gcc-sparc64-linux-gnu libc6-dev-sparc64-cross"; \
+  fi && \
+  echo "compilers: ${AVAILABLE_COMPILERS}"
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+        apt install -y --no-install-recommends \
+        ${AVAILABLE_COMPILERS} && \
         dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt
 
 
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [PULL 14/14] tests/functional: expose sys.argv to unittest.main
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (12 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 13/14] tests/docker: handle host-arch selection " Alex Bennée
@ 2025-07-27  8:32 ` Alex Bennée
  2025-07-28 15:20 ` [PULL for 10.1-rc1 00/14] documentation an testing updates Stefan Hajnoczi
  14 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-07-27  8:32 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Daniel P. Berrangé, Thomas Huth,
	Philippe Mathieu-Daudé

With this we can call the supported we can take advantage of the
argument the module supports:

  env PYTHONPATH=/home/alex/lsrc/qemu.git/python:/home/alex/lsrc/qemu.git/tests/functional ./pyvenv/bin/python /home/alex/lsrc/qemu.git/tests/functional/test_aarch64_kvm.py --help
  usage: test_aarch64_kvm.py [-h] [-v] [-q] [--locals] [--durations N] [-f] [-c] [-b] [-k TESTNAMEPATTERNS] [tests ...]

  positional arguments:
    tests                a list of any number of test modules, classes and test methods.

  options:
    -h, --help           show this help message and exit
    -v, --verbose        Verbose output
    -q, --quiet          Quiet output
    --locals             Show local variables in tracebacks
    --durations N        Show the N slowest test cases (N=0 for all)
    -f, --failfast       Stop on first fail or error
    -c, --catch          Catch Ctrl-C and display results so far
    -b, --buffer         Buffer stdout and stderr during tests
    -k TESTNAMEPATTERNS  Only run tests which match the given substring

  Examples:
    test_aarch64_kvm.py test_module               - run tests from test_module
    test_aarch64_kvm.py module.TestClass          - run tests from module.TestClass
    test_aarch64_kvm.py module.Class.test_method  - run specified test method
    test_aarch64_kvm.py path/to/test_file.py      - run tests from test_file.py

  usage: test_aarch64_kvm.py discover [-h] [-v] [-q] [--locals] [--durations N] [-f] [-c] [-b] [-k TESTNAMEPATTERNS] [-s START] [-p PATTERN] [-t TOP]

  options:
    -h, --help            show this help message and exit
    -v, --verbose         Verbose output
    -q, --quiet           Quiet output
    --locals              Show local variables in tracebacks
    --durations N         Show the N slowest test cases (N=0 for all)
    -f, --failfast        Stop on first fail or error
    -c, --catch           Catch Ctrl-C and display results so far
    -b, --buffer          Buffer stdout and stderr during tests
    -k TESTNAMEPATTERNS   Only run tests which match the given substring
    -s, --start-directory START
                          Directory to start discovery ('.' default)
    -p, --pattern PATTERN
                          Pattern to match tests ('test*.py' default)
    -t, --top-level-directory TOP
                          Top level directory of project (defaults to start directory)

  For test discovery all test modules must be importable from the top level directory of the project.

Suggested-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20250725154517.3523095-15-alex.bennee@linaro.org>

diff --git a/tests/functional/qemu_test/testcase.py b/tests/functional/qemu_test/testcase.py
index 2a78e735f16..5caf7b13fe3 100644
--- a/tests/functional/qemu_test/testcase.py
+++ b/tests/functional/qemu_test/testcase.py
@@ -249,7 +249,7 @@ def main():
         tr = pycotap.TAPTestRunner(message_log = pycotap.LogMode.LogToError,
                                    test_output_log = pycotap.LogMode.LogToError)
         res = unittest.main(module = None, testRunner = tr, exit = False,
-                            argv=["__dummy__", path])
+                            argv=[sys.argv[0], path] + sys.argv[1:])
         for (test, message) in res.result.errors + res.result.failures:
 
             if hasattr(test, "log_filename"):
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [PULL for 10.1-rc1 00/14] documentation an testing updates
  2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
                   ` (13 preceding siblings ...)
  2025-07-27  8:32 ` [PULL 14/14] tests/functional: expose sys.argv to unittest.main Alex Bennée
@ 2025-07-28 15:20 ` Stefan Hajnoczi
  14 siblings, 0 replies; 28+ messages in thread
From: Stefan Hajnoczi @ 2025-07-28 15:20 UTC (permalink / raw)
  To: Alex Bennée; +Cc: qemu-devel, Alex Bennée

[-- Attachment #1: Type: text/plain, Size: 116 bytes --]

Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/10.1 for any user-visible changes.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-27  8:32 ` [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations Alex Bennée
@ 2025-07-28 19:03   ` Pierrick Bouvier
  2025-07-28 20:14     ` Gustavo Romero
  2025-07-30  7:25     ` Pierrick Bouvier
  0 siblings, 2 replies; 28+ messages in thread
From: Pierrick Bouvier @ 2025-07-28 19:03 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

Hi Alex,

On 7/27/25 1:32 AM, Alex Bennée wrote:
> As our set of multiarch tests has grown the practice of running every
> plugin with every test is becoming unsustainable. If we switch to
> ensuring every test gets run with at least one plugin we can speed
> things up.
> 
> Some plugins do need to be run with specific tests (for example the
> memory instrumentation test). We can handle this by manually adding
> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
> so we don't enable the runs when plugins are not enabled.
> 
> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
> 
> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
> index a12b15637ea..18afd5be194 100644
> --- a/tests/tcg/Makefile.target
> +++ b/tests/tcg/Makefile.target
> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>   # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>   # pre-requistes manually here as we can't use stems to handle it. We
>   # only expand MULTIARCH_TESTS which are common on most of our targets
> -# to avoid an exponential explosion as new tests are added. We also
> -# add some special helpers the run-plugin- rules can use below.
> +# and rotate the plugins so we don't grow too out of control as new
> +# tests are added. Plugins that need to run with a specific test
> +# should ensure they add their combination to EXTRA_RUNS.
>   
>   ifneq ($(MULTIARCH_TESTS),)
> -$(foreach p,$(PLUGINS), \
> -	$(foreach t,$(MULTIARCH_TESTS),\
> -		$(eval run-plugin-$(t)-with-$(p): $t $p) \
> -		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
> +
> +NUM_PLUGINS := $(words $(PLUGINS))
> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
> +
> +define mod_plus_one
> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
> +endef
> +
> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
> +	$(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
> +	$(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
> +	$(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
> +	$(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
> +
>   endif # MULTIARCH_TESTS
>   endif # CONFIG_PLUGIN
>   
> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
> index bfdf7197a7b..38345ff8805 100644
> --- a/tests/tcg/multiarch/Makefile.target
> +++ b/tests/tcg/multiarch/Makefile.target
> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>   TESTS += semihosting semiconsole
>   endif
>   
> +test-plugin-mem-access: CFLAGS+=-pthread -O0
> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
> +
> +ifeq ($(CONFIG_PLUGIN),y)
>   # Test plugin memory access instrumentation
>   run-plugin-test-plugin-mem-access-with-libmem.so: \
>   	PLUGIN_ARGS=$(COMMA)print-accesses=true
> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>   	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>   	$(QEMU) $<
>   
> -test-plugin-mem-access: CFLAGS+=-pthread -O0
> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
> +endif
>   
>   # Update TESTS
>   TESTS += $(MULTIARCH_TESTS)
> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
> index 5acf2700812..4171b4e6aa0 100644
> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
> @@ -71,8 +71,11 @@ endif
>   MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>   	run-gdbstub-untimely-packet run-gdbstub-registers
>   
> +ifeq ($(CONFIG_PLUGIN),y)
>   # Test plugin memory access instrumentation
> -run-plugin-memory-with-libmem.so: 		\
> -	PLUGIN_ARGS=$(COMMA)region-summary=true
> -run-plugin-memory-with-libmem.so: 		\
> -	CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
> +run-plugin-memory-with-libmem.so: memory libmem.so
> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
> +
> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
> +endif

I'm not sure how it's related, but check-tcg on aarch64 host now fails 
[1] since this series was merged, and I suspect it may be related to 
this patch. I didn't spend time to reproduce and investigate it.

[1] 
https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-28 19:03   ` Pierrick Bouvier
@ 2025-07-28 20:14     ` Gustavo Romero
  2025-07-31 18:58       ` Gustavo Romero
  2025-07-30  7:25     ` Pierrick Bouvier
  1 sibling, 1 reply; 28+ messages in thread
From: Gustavo Romero @ 2025-07-28 20:14 UTC (permalink / raw)
  To: Pierrick Bouvier, Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

Hi,

On 7/28/25 16:03, Pierrick Bouvier wrote:
> Hi Alex,
> 
> On 7/27/25 1:32 AM, Alex Bennée wrote:
>> As our set of multiarch tests has grown the practice of running every
>> plugin with every test is becoming unsustainable. If we switch to
>> ensuring every test gets run with at least one plugin we can speed
>> things up.
>>
>> Some plugins do need to be run with specific tests (for example the
>> memory instrumentation test). We can handle this by manually adding
>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>> so we don't enable the runs when plugins are not enabled.
>>
>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>
>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>> index a12b15637ea..18afd5be194 100644
>> --- a/tests/tcg/Makefile.target
>> +++ b/tests/tcg/Makefile.target
>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>   # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>   # pre-requistes manually here as we can't use stems to handle it. We
>>   # only expand MULTIARCH_TESTS which are common on most of our targets
>> -# to avoid an exponential explosion as new tests are added. We also
>> -# add some special helpers the run-plugin- rules can use below.
>> +# and rotate the plugins so we don't grow too out of control as new
>> +# tests are added. Plugins that need to run with a specific test
>> +# should ensure they add their combination to EXTRA_RUNS.
>>   ifneq ($(MULTIARCH_TESTS),)
>> -$(foreach p,$(PLUGINS), \
>> -    $(foreach t,$(MULTIARCH_TESTS),\
>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>> +
>> +NUM_PLUGINS := $(words $(PLUGINS))
>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>> +
>> +define mod_plus_one
>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>> +endef
>> +
>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>> +
>>   endif # MULTIARCH_TESTS
>>   endif # CONFIG_PLUGIN
>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>> index bfdf7197a7b..38345ff8805 100644
>> --- a/tests/tcg/multiarch/Makefile.target
>> +++ b/tests/tcg/multiarch/Makefile.target
>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>   TESTS += semihosting semiconsole
>>   endif
>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>> +
>> +ifeq ($(CONFIG_PLUGIN),y)
>>   # Test plugin memory access instrumentation
>>   run-plugin-test-plugin-mem-access-with-libmem.so: \
>>       PLUGIN_ARGS=$(COMMA)print-accesses=true
>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>       $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>       $(QEMU) $<
>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>> +endif
>>   # Update TESTS
>>   TESTS += $(MULTIARCH_TESTS)
>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>> index 5acf2700812..4171b4e6aa0 100644
>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>> @@ -71,8 +71,11 @@ endif
>>   MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>       run-gdbstub-untimely-packet run-gdbstub-registers
>> +ifeq ($(CONFIG_PLUGIN),y)
>>   # Test plugin memory access instrumentation
>> -run-plugin-memory-with-libmem.so:         \
>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>> -run-plugin-memory-with-libmem.so:         \
>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>> +run-plugin-memory-with-libmem.so: memory libmem.so
>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>> +
>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>> +endif
> 
> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
> 
> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693

I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:

[...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out

not:

[...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out


Cheers,
Gustavo


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-28 19:03   ` Pierrick Bouvier
  2025-07-28 20:14     ` Gustavo Romero
@ 2025-07-30  7:25     ` Pierrick Bouvier
  2025-08-04  8:39       ` Alex Bennée
  1 sibling, 1 reply; 28+ messages in thread
From: Pierrick Bouvier @ 2025-07-30  7:25 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

On 7/28/25 12:03 PM, Pierrick Bouvier wrote:
> Hi Alex,
> 
> On 7/27/25 1:32 AM, Alex Bennée wrote:
>> As our set of multiarch tests has grown the practice of running every
>> plugin with every test is becoming unsustainable. If we switch to
>> ensuring every test gets run with at least one plugin we can speed
>> things up.
>>
>> Some plugins do need to be run with specific tests (for example the
>> memory instrumentation test). We can handle this by manually adding
>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>> so we don't enable the runs when plugins are not enabled.
>>
>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>
>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>> index a12b15637ea..18afd5be194 100644
>> --- a/tests/tcg/Makefile.target
>> +++ b/tests/tcg/Makefile.target
>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>    # pre-requistes manually here as we can't use stems to handle it. We
>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>> -# to avoid an exponential explosion as new tests are added. We also
>> -# add some special helpers the run-plugin- rules can use below.
>> +# and rotate the plugins so we don't grow too out of control as new
>> +# tests are added. Plugins that need to run with a specific test
>> +# should ensure they add their combination to EXTRA_RUNS.
>>    
>>    ifneq ($(MULTIARCH_TESTS),)
>> -$(foreach p,$(PLUGINS), \
>> -	$(foreach t,$(MULTIARCH_TESTS),\
>> -		$(eval run-plugin-$(t)-with-$(p): $t $p) \
>> -		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>> +
>> +NUM_PLUGINS := $(words $(PLUGINS))
>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>> +
>> +define mod_plus_one
>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>> +endef
>> +
>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>> +	$(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>> +	$(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>> +	$(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>> +	$(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>> +
>>    endif # MULTIARCH_TESTS
>>    endif # CONFIG_PLUGIN
>>    
>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>> index bfdf7197a7b..38345ff8805 100644
>> --- a/tests/tcg/multiarch/Makefile.target
>> +++ b/tests/tcg/multiarch/Makefile.target
>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>    TESTS += semihosting semiconsole
>>    endif
>>    
>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>> +
>> +ifeq ($(CONFIG_PLUGIN),y)
>>    # Test plugin memory access instrumentation
>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>    	PLUGIN_ARGS=$(COMMA)print-accesses=true
>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>    	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>    	$(QEMU) $<
>>    
>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>> +endif
>>    
>>    # Update TESTS
>>    TESTS += $(MULTIARCH_TESTS)
>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>> index 5acf2700812..4171b4e6aa0 100644
>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>> @@ -71,8 +71,11 @@ endif
>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>    	run-gdbstub-untimely-packet run-gdbstub-registers
>>    
>> +ifeq ($(CONFIG_PLUGIN),y)
>>    # Test plugin memory access instrumentation
>> -run-plugin-memory-with-libmem.so: 		\
>> -	PLUGIN_ARGS=$(COMMA)region-summary=true
>> -run-plugin-memory-with-libmem.so: 		\
>> -	CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>> +run-plugin-memory-with-libmem.so: memory libmem.so
>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>> +
>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>> +endif
> 
> I'm not sure how it's related, but check-tcg on aarch64 host now fails
> [1] since this series was merged, and I suspect it may be related to
> this patch. I didn't spend time to reproduce and investigate it.
>

Reverting this patch solved the problem on my side. As well, I'm not 
sure if it's a real problem to run all plugins for all tests. At the 
moment, it takes 5 min on a slow machine with 4 cpus and a sanitized 
build, something we can probably live with for now.

Unfortunately Alex is out this week, but it would be nice if another 
maintainer could make a PR reverting this patch.

Regards,
Pierrick

> [1]
> https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-28 20:14     ` Gustavo Romero
@ 2025-07-31 18:58       ` Gustavo Romero
  2025-07-31 19:23         ` Pierrick Bouvier
  0 siblings, 1 reply; 28+ messages in thread
From: Gustavo Romero @ 2025-07-31 18:58 UTC (permalink / raw)
  To: Pierrick Bouvier, Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

Hi,

On 7/28/25 17:14, Gustavo Romero wrote:
> Hi,
> 
> On 7/28/25 16:03, Pierrick Bouvier wrote:
>> Hi Alex,
>>
>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>> As our set of multiarch tests has grown the practice of running every
>>> plugin with every test is becoming unsustainable. If we switch to
>>> ensuring every test gets run with at least one plugin we can speed
>>> things up.
>>>
>>> Some plugins do need to be run with specific tests (for example the
>>> memory instrumentation test). We can handle this by manually adding
>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>> so we don't enable the runs when plugins are not enabled.
>>>
>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>
>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>> index a12b15637ea..18afd5be194 100644
>>> --- a/tests/tcg/Makefile.target
>>> +++ b/tests/tcg/Makefile.target
>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>   # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>   # pre-requistes manually here as we can't use stems to handle it. We
>>>   # only expand MULTIARCH_TESTS which are common on most of our targets
>>> -# to avoid an exponential explosion as new tests are added. We also
>>> -# add some special helpers the run-plugin- rules can use below.
>>> +# and rotate the plugins so we don't grow too out of control as new
>>> +# tests are added. Plugins that need to run with a specific test
>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>   ifneq ($(MULTIARCH_TESTS),)
>>> -$(foreach p,$(PLUGINS), \
>>> -    $(foreach t,$(MULTIARCH_TESTS),\
>>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>> +
>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>> +
>>> +define mod_plus_one
>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>> +endef
>>> +
>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>> +
>>>   endif # MULTIARCH_TESTS
>>>   endif # CONFIG_PLUGIN
>>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>>> index bfdf7197a7b..38345ff8805 100644
>>> --- a/tests/tcg/multiarch/Makefile.target
>>> +++ b/tests/tcg/multiarch/Makefile.target
>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>   TESTS += semihosting semiconsole
>>>   endif
>>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>> +
>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>   # Test plugin memory access instrumentation
>>>   run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>       PLUGIN_ARGS=$(COMMA)print-accesses=true
>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>       $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>       $(QEMU) $<
>>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>> +endif
>>>   # Update TESTS
>>>   TESTS += $(MULTIARCH_TESTS)
>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> index 5acf2700812..4171b4e6aa0 100644
>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> @@ -71,8 +71,11 @@ endif
>>>   MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>       run-gdbstub-untimely-packet run-gdbstub-registers
>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>   # Test plugin memory access instrumentation
>>> -run-plugin-memory-with-libmem.so:         \
>>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>>> -run-plugin-memory-with-libmem.so:         \
>>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>> +
>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>> +endif
>>
>> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
>>
>> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
> 
> I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:
> 
> [...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out
> 
> not:
> 
> [...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out

The problem is that the new rules generated by a shuffled combination of tests and plugin
(the one using eval) sometimes does not include the rule for the test+plugin combination
passed via EXTRA_RUNs.

So EXTRA_RUNS tests like run-plugin-test-plugin-mem-access-with-libmem.so might end up
with a proper rule if the test test-plugin-mem-access is combined with other plugin
randomly, since now a plugin is picked up based on a tests index _idx modulo with the
number of plugins.

A possible fix is to generate correctly the rules for the tests with plugins passed
via EXTRA_RUNS and ideally, following the patch's mood, remove the test from running
if any other plugin (no shuffle with any other plugin).

Of course, as Pierrick said, this patch could be a premature optimization. So maybe
it doesn´t justify adding more complexity to our Makefile (Makefiles are hard to debug,
with 'eval' tricks, it's _reallly_ hard, so the more we avoid it the better).

That said, if we want to keep this commit, I've kicked off a test to fix it here:

https://gitlab.com/gusbromero/qemu/-/pipelines/1959953122

and sent the fix to the ML too. HTH.


Cheers,
Gustavo


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-31 18:58       ` Gustavo Romero
@ 2025-07-31 19:23         ` Pierrick Bouvier
  2025-07-31 19:34           ` Gustavo Romero
  2025-08-01  0:29           ` Gustavo Romero
  0 siblings, 2 replies; 28+ messages in thread
From: Pierrick Bouvier @ 2025-07-31 19:23 UTC (permalink / raw)
  To: Gustavo Romero, Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

On 7/31/25 11:58 AM, Gustavo Romero wrote:
> Hi,
> 
> On 7/28/25 17:14, Gustavo Romero wrote:
>> Hi,
>>
>> On 7/28/25 16:03, Pierrick Bouvier wrote:
>>> Hi Alex,
>>>
>>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>>> As our set of multiarch tests has grown the practice of running every
>>>> plugin with every test is becoming unsustainable. If we switch to
>>>> ensuring every test gets run with at least one plugin we can speed
>>>> things up.
>>>>
>>>> Some plugins do need to be run with specific tests (for example the
>>>> memory instrumentation test). We can handle this by manually adding
>>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>>> so we don't enable the runs when plugins are not enabled.
>>>>
>>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>>
>>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>>> index a12b15637ea..18afd5be194 100644
>>>> --- a/tests/tcg/Makefile.target
>>>> +++ b/tests/tcg/Makefile.target
>>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>>    # pre-requistes manually here as we can't use stems to handle it. We
>>>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>>>> -# to avoid an exponential explosion as new tests are added. We also
>>>> -# add some special helpers the run-plugin- rules can use below.
>>>> +# and rotate the plugins so we don't grow too out of control as new
>>>> +# tests are added. Plugins that need to run with a specific test
>>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>>    ifneq ($(MULTIARCH_TESTS),)
>>>> -$(foreach p,$(PLUGINS), \
>>>> -    $(foreach t,$(MULTIARCH_TESTS),\
>>>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>>>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>>> +
>>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>>> +
>>>> +define mod_plus_one
>>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>>> +endef
>>>> +
>>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>>> +
>>>>    endif # MULTIARCH_TESTS
>>>>    endif # CONFIG_PLUGIN
>>>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>>>> index bfdf7197a7b..38345ff8805 100644
>>>> --- a/tests/tcg/multiarch/Makefile.target
>>>> +++ b/tests/tcg/multiarch/Makefile.target
>>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>>    TESTS += semihosting semiconsole
>>>>    endif
>>>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>> +
>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>    # Test plugin memory access instrumentation
>>>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>        PLUGIN_ARGS=$(COMMA)print-accesses=true
>>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>        $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>>        $(QEMU) $<
>>>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>>> +endif
>>>>    # Update TESTS
>>>>    TESTS += $(MULTIARCH_TESTS)
>>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> index 5acf2700812..4171b4e6aa0 100644
>>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> @@ -71,8 +71,11 @@ endif
>>>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>>        run-gdbstub-untimely-packet run-gdbstub-registers
>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>    # Test plugin memory access instrumentation
>>>> -run-plugin-memory-with-libmem.so:         \
>>>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>>>> -run-plugin-memory-with-libmem.so:         \
>>>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>> +
>>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>>> +endif
>>>
>>> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
>>>
>>> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
>>
>> I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:
>>
>> [...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>
>> not:
>>
>> [...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out
> 
> The problem is that the new rules generated by a shuffled combination of tests and plugin
> (the one using eval) sometimes does not include the rule for the test+plugin combination
> passed via EXTRA_RUNs.
> 
> So EXTRA_RUNS tests like run-plugin-test-plugin-mem-access-with-libmem.so might end up
> with a proper rule if the test test-plugin-mem-access is combined with other plugin
> randomly, since now a plugin is picked up based on a tests index _idx modulo with the
> number of plugins.
> 
> A possible fix is to generate correctly the rules for the tests with plugins passed
> via EXTRA_RUNS and ideally, following the patch's mood, remove the test from running
> if any other plugin (no shuffle with any other plugin).
> 
> Of course, as Pierrick said, this patch could be a premature optimization. So maybe
> it doesn´t justify adding more complexity to our Makefile (Makefiles are hard to debug,
> with 'eval' tricks, it's _reallly_ hard, so the more we avoid it the better).
> 
> That said, if we want to keep this commit, I've kicked off a test to fix it here:
> 
> https://gitlab.com/gusbromero/qemu/-/pipelines/1959953122
> 
> and sent the fix to the ML too. HTH.
> 

Thanks for taking a look at this Gustavo.

In the pipeline you shared, the build-some-softmmu fails with:
Makefile:210: *** multiple target patterns.  Stop.
make: *** [/builds/gusbromero/qemu/tests/Makefile.include:50: 
build-tcg-tests-x86_64-softmmu] Error 2
make: *** Waiting for unfinished jobs....

Is that a new bug related to current patch?

> 
> Cheers,
> Gustavo



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-31 19:23         ` Pierrick Bouvier
@ 2025-07-31 19:34           ` Gustavo Romero
  2025-08-01  0:29           ` Gustavo Romero
  1 sibling, 0 replies; 28+ messages in thread
From: Gustavo Romero @ 2025-07-31 19:34 UTC (permalink / raw)
  To: Pierrick Bouvier, Alex Bennée, qemu-devel
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

Hi Pierrick,

On 7/31/25 16:23, Pierrick Bouvier wrote:
> On 7/31/25 11:58 AM, Gustavo Romero wrote:
>> Hi,
>>
>> On 7/28/25 17:14, Gustavo Romero wrote:
>>> Hi,
>>>
>>> On 7/28/25 16:03, Pierrick Bouvier wrote:
>>>> Hi Alex,
>>>>
>>>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>>>> As our set of multiarch tests has grown the practice of running every
>>>>> plugin with every test is becoming unsustainable. If we switch to
>>>>> ensuring every test gets run with at least one plugin we can speed
>>>>> things up.
>>>>>
>>>>> Some plugins do need to be run with specific tests (for example the
>>>>> memory instrumentation test). We can handle this by manually adding
>>>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>>>> so we don't enable the runs when plugins are not enabled.
>>>>>
>>>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>>>
>>>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>>>> index a12b15637ea..18afd5be194 100644
>>>>> --- a/tests/tcg/Makefile.target
>>>>> +++ b/tests/tcg/Makefile.target
>>>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>>>    # pre-requistes manually here as we can't use stems to handle it. We
>>>>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>>>>> -# to avoid an exponential explosion as new tests are added. We also
>>>>> -# add some special helpers the run-plugin- rules can use below.
>>>>> +# and rotate the plugins so we don't grow too out of control as new
>>>>> +# tests are added. Plugins that need to run with a specific test
>>>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>>>    ifneq ($(MULTIARCH_TESTS),)
>>>>> -$(foreach p,$(PLUGINS), \
>>>>> -    $(foreach t,$(MULTIARCH_TESTS),\
>>>>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>>>>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>>>> +
>>>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>>>> +
>>>>> +define mod_plus_one
>>>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>>>> +endef
>>>>> +
>>>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>>>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>>>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>>>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>>>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>>>> +
>>>>>    endif # MULTIARCH_TESTS
>>>>>    endif # CONFIG_PLUGIN
>>>>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>>>>> index bfdf7197a7b..38345ff8805 100644
>>>>> --- a/tests/tcg/multiarch/Makefile.target
>>>>> +++ b/tests/tcg/multiarch/Makefile.target
>>>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>>>    TESTS += semihosting semiconsole
>>>>>    endif
>>>>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>> +
>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>    # Test plugin memory access instrumentation
>>>>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>        PLUGIN_ARGS=$(COMMA)print-accesses=true
>>>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>        $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>>>        $(QEMU) $<
>>>>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>>>> +endif
>>>>>    # Update TESTS
>>>>>    TESTS += $(MULTIARCH_TESTS)
>>>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> index 5acf2700812..4171b4e6aa0 100644
>>>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> @@ -71,8 +71,11 @@ endif
>>>>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>>>        run-gdbstub-untimely-packet run-gdbstub-registers
>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>    # Test plugin memory access instrumentation
>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>> +
>>>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>>>> +endif
>>>>
>>>> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
>>>>
>>>> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
>>>
>>> I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:
>>>
>>> [...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>>
>>> not:
>>>
>>> [...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>
>> The problem is that the new rules generated by a shuffled combination of tests and plugin
>> (the one using eval) sometimes does not include the rule for the test+plugin combination
>> passed via EXTRA_RUNs.
>>
>> So EXTRA_RUNS tests like run-plugin-test-plugin-mem-access-with-libmem.so might end up
>> with a proper rule if the test test-plugin-mem-access is combined with other plugin
>> randomly, since now a plugin is picked up based on a tests index _idx modulo with the
>> number of plugins.
>>
>> A possible fix is to generate correctly the rules for the tests with plugins passed
>> via EXTRA_RUNS and ideally, following the patch's mood, remove the test from running
>> if any other plugin (no shuffle with any other plugin).
>>
>> Of course, as Pierrick said, this patch could be a premature optimization. So maybe
>> it doesn´t justify adding more complexity to our Makefile (Makefiles are hard to debug,
>> with 'eval' tricks, it's _reallly_ hard, so the more we avoid it the better).
>>
>> That said, if we want to keep this commit, I've kicked off a test to fix it here:
>>
>> https://gitlab.com/gusbromero/qemu/-/pipelines/1959953122
>>
>> and sent the fix to the ML too. HTH.
>>
> 
> Thanks for taking a look at this Gustavo.
> 
> In the pipeline you shared, the build-some-softmmu fails with:
> Makefile:210: *** multiple target patterns.  Stop.
> make: *** [/builds/gusbromero/qemu/tests/Makefile.include:50: build-tcg-tests-x86_64-softmmu] Error 2
> make: *** Waiting for unfinished jobs....
> 
> Is that a new bug related to current patch?

Yeah. I'm taking a look. I'll get back in a bit.

Thanks.


Cheers,
Gustavo
  
>>
>> Cheers,
>> Gustavo
> 



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-31 19:23         ` Pierrick Bouvier
  2025-07-31 19:34           ` Gustavo Romero
@ 2025-08-01  0:29           ` Gustavo Romero
  2025-08-01  0:33             ` Gustavo Romero
  1 sibling, 1 reply; 28+ messages in thread
From: Gustavo Romero @ 2025-08-01  0:29 UTC (permalink / raw)
  To: Pierrick Bouvier, Alex Bennée, qemu-devel, stefanha
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé

Hi Stefan and Pierrick,

On 7/31/25 16:23, Pierrick Bouvier wrote:
> On 7/31/25 11:58 AM, Gustavo Romero wrote:
>> Hi,
>>
>> On 7/28/25 17:14, Gustavo Romero wrote:
>>> Hi,
>>>
>>> On 7/28/25 16:03, Pierrick Bouvier wrote:
>>>> Hi Alex,
>>>>
>>>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>>>> As our set of multiarch tests has grown the practice of running every
>>>>> plugin with every test is becoming unsustainable. If we switch to
>>>>> ensuring every test gets run with at least one plugin we can speed
>>>>> things up.
>>>>>
>>>>> Some plugins do need to be run with specific tests (for example the
>>>>> memory instrumentation test). We can handle this by manually adding
>>>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>>>> so we don't enable the runs when plugins are not enabled.
>>>>>
>>>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>>>
>>>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>>>> index a12b15637ea..18afd5be194 100644
>>>>> --- a/tests/tcg/Makefile.target
>>>>> +++ b/tests/tcg/Makefile.target
>>>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>>>    # pre-requistes manually here as we can't use stems to handle it. We
>>>>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>>>>> -# to avoid an exponential explosion as new tests are added. We also
>>>>> -# add some special helpers the run-plugin- rules can use below.
>>>>> +# and rotate the plugins so we don't grow too out of control as new
>>>>> +# tests are added. Plugins that need to run with a specific test
>>>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>>>    ifneq ($(MULTIARCH_TESTS),)
>>>>> -$(foreach p,$(PLUGINS), \
>>>>> -    $(foreach t,$(MULTIARCH_TESTS),\
>>>>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>>>>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>>>> +
>>>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>>>> +
>>>>> +define mod_plus_one
>>>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>>>> +endef
>>>>> +
>>>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>>>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>>>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>>>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>>>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>>>> +
>>>>>    endif # MULTIARCH_TESTS
>>>>>    endif # CONFIG_PLUGIN
>>>>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>>>>> index bfdf7197a7b..38345ff8805 100644
>>>>> --- a/tests/tcg/multiarch/Makefile.target
>>>>> +++ b/tests/tcg/multiarch/Makefile.target
>>>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>>>    TESTS += semihosting semiconsole
>>>>>    endif
>>>>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>> +
>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>    # Test plugin memory access instrumentation
>>>>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>        PLUGIN_ARGS=$(COMMA)print-accesses=true
>>>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>        $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>>>        $(QEMU) $<
>>>>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>>>> +endif
>>>>>    # Update TESTS
>>>>>    TESTS += $(MULTIARCH_TESTS)
>>>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> index 5acf2700812..4171b4e6aa0 100644
>>>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>> @@ -71,8 +71,11 @@ endif
>>>>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>>>        run-gdbstub-untimely-packet run-gdbstub-registers
>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>    # Test plugin memory access instrumentation
>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>> +
>>>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>>>> +endif
>>>>
>>>> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
>>>>
>>>> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
>>>
>>> I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:
>>>
>>> [...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>>
>>> not:
>>>
>>> [...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>
>> The problem is that the new rules generated by a shuffled combination of tests and plugin
>> (the one using eval) sometimes does not include the rule for the test+plugin combination
>> passed via EXTRA_RUNs.
>>
>> So EXTRA_RUNS tests like run-plugin-test-plugin-mem-access-with-libmem.so might end up
>> with a proper rule if the test test-plugin-mem-access is combined with other plugin
>> randomly, since now a plugin is picked up based on a tests index _idx modulo with the
>> number of plugins.
>>
>> A possible fix is to generate correctly the rules for the tests with plugins passed
>> via EXTRA_RUNS and ideally, following the patch's mood, remove the test from running
>> if any other plugin (no shuffle with any other plugin).
>>
>> Of course, as Pierrick said, this patch could be a premature optimization. So maybe
>> it doesn´t justify adding more complexity to our Makefile (Makefiles are hard to debug,
>> with 'eval' tricks, it's _reallly_ hard, so the more we avoid it the better).
>>
>> That said, if we want to keep this commit, I've kicked off a test to fix it here:
>>
>> https://gitlab.com/gusbromero/qemu/-/pipelines/1959953122
>>
>> and sent the fix to the ML too. HTH.
>>
> 
> Thanks for taking a look at this Gustavo.
> 
> In the pipeline you shared, the build-some-softmmu fails with:
> Makefile:210: *** multiple target patterns.  Stop.
> make: *** [/builds/gusbromero/qemu/tests/Makefile.include:50: build-tcg-tests-x86_64-softmmu] Error 2
> make: *** Waiting for unfinished jobs....
> 
> Is that a new bug related to current patch?

v2 was busted. Please consider this fix, which passed the test pipeline:

https://gitlab.com/gusbromero/qemu/-/pipelines/1960296034

https://mail.gnu.org/archive/html/qemu-devel/2025-07/msg06926.html


Cheers,
Gustavo


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-08-01  0:29           ` Gustavo Romero
@ 2025-08-01  0:33             ` Gustavo Romero
  0 siblings, 0 replies; 28+ messages in thread
From: Gustavo Romero @ 2025-08-01  0:33 UTC (permalink / raw)
  To: Pierrick Bouvier, Alex Bennée, qemu-devel, stefanha
  Cc: Manos Pitsidianakis, Philippe Mathieu-Daudé



On 7/31/25 21:29, Gustavo Romero wrote:
> Hi Stefan and Pierrick,
> 
> On 7/31/25 16:23, Pierrick Bouvier wrote:
>> On 7/31/25 11:58 AM, Gustavo Romero wrote:
>>> Hi,
>>>
>>> On 7/28/25 17:14, Gustavo Romero wrote:
>>>> Hi,
>>>>
>>>> On 7/28/25 16:03, Pierrick Bouvier wrote:
>>>>> Hi Alex,
>>>>>
>>>>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>>>>> As our set of multiarch tests has grown the practice of running every
>>>>>> plugin with every test is becoming unsustainable. If we switch to
>>>>>> ensuring every test gets run with at least one plugin we can speed
>>>>>> things up.
>>>>>>
>>>>>> Some plugins do need to be run with specific tests (for example the
>>>>>> memory instrumentation test). We can handle this by manually adding
>>>>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>>>>> so we don't enable the runs when plugins are not enabled.
>>>>>>
>>>>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>>>>
>>>>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>>>>> index a12b15637ea..18afd5be194 100644
>>>>>> --- a/tests/tcg/Makefile.target
>>>>>> +++ b/tests/tcg/Makefile.target
>>>>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>>>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>>>>    # pre-requistes manually here as we can't use stems to handle it. We
>>>>>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>>>>>> -# to avoid an exponential explosion as new tests are added. We also
>>>>>> -# add some special helpers the run-plugin- rules can use below.
>>>>>> +# and rotate the plugins so we don't grow too out of control as new
>>>>>> +# tests are added. Plugins that need to run with a specific test
>>>>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>>>>    ifneq ($(MULTIARCH_TESTS),)
>>>>>> -$(foreach p,$(PLUGINS), \
>>>>>> -    $(foreach t,$(MULTIARCH_TESTS),\
>>>>>> -        $(eval run-plugin-$(t)-with-$(p): $t $p) \
>>>>>> -        $(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>>>>> +
>>>>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>>>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>>>>> +
>>>>>> +define mod_plus_one
>>>>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>>>>> +endef
>>>>>> +
>>>>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>>>>> +    $(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>>>>> +    $(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>>>>> +    $(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>>>>> +    $(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>>>>> +
>>>>>>    endif # MULTIARCH_TESTS
>>>>>>    endif # CONFIG_PLUGIN
>>>>>> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
>>>>>> index bfdf7197a7b..38345ff8805 100644
>>>>>> --- a/tests/tcg/multiarch/Makefile.target
>>>>>> +++ b/tests/tcg/multiarch/Makefile.target
>>>>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>>>>    TESTS += semihosting semiconsole
>>>>>>    endif
>>>>>> +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>>> +
>>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>>    # Test plugin memory access instrumentation
>>>>>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>>        PLUGIN_ARGS=$(COMMA)print-accesses=true
>>>>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>>>        $(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>>>>        $(QEMU) $<
>>>>>> -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>>>>> +endif
>>>>>>    # Update TESTS
>>>>>>    TESTS += $(MULTIARCH_TESTS)
>>>>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>>> index 5acf2700812..4171b4e6aa0 100644
>>>>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>>>> @@ -71,8 +71,11 @@ endif
>>>>>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>>>>        run-gdbstub-untimely-packet run-gdbstub-registers
>>>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>>>    # Test plugin memory access instrumentation
>>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>>> -    PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>>> -run-plugin-memory-with-libmem.so:         \
>>>>>> -    CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>>>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>>>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>>>> +
>>>>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>>>>> +endif
>>>>>
>>>>> I'm not sure how it's related, but check-tcg on aarch64 host now fails [1] since this series was merged, and I suspect it may be related to this patch. I didn't spend time to reproduce and investigate it.
>>>>>
>>>>> [1] https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
>>>>
>>>> I was not able to reproduce it locally on 22.04, but in the CI indeed the test command is missing the "test-plugin-mem-access" binary at the end, just before redirection to .so.out, it should be:
>>>>
>>>> [...] -D test-plugin-mem-access-with-libmem.so.pout test-plugin-mem-access >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>>>
>>>> not:
>>>>
>>>> [...] -D test-plugin-mem-access-with-libmem.so.pout  >  run-plugin-test-plugin-mem-access-with-libmem.so.out
>>>
>>> The problem is that the new rules generated by a shuffled combination of tests and plugin
>>> (the one using eval) sometimes does not include the rule for the test+plugin combination
>>> passed via EXTRA_RUNs.
>>>
>>> So EXTRA_RUNS tests like run-plugin-test-plugin-mem-access-with-libmem.so might end up
>>> with a proper rule if the test test-plugin-mem-access is combined with other plugin
>>> randomly, since now a plugin is picked up based on a tests index _idx modulo with the
>>> number of plugins.
>>>
>>> A possible fix is to generate correctly the rules for the tests with plugins passed
>>> via EXTRA_RUNS and ideally, following the patch's mood, remove the test from running
>>> if any other plugin (no shuffle with any other plugin).
>>>
>>> Of course, as Pierrick said, this patch could be a premature optimization. So maybe
>>> it doesn´t justify adding more complexity to our Makefile (Makefiles are hard to debug,
>>> with 'eval' tricks, it's _reallly_ hard, so the more we avoid it the better).
>>>
>>> That said, if we want to keep this commit, I've kicked off a test to fix it here:
>>>
>>> https://gitlab.com/gusbromero/qemu/-/pipelines/1959953122
>>>
>>> and sent the fix to the ML too. HTH.
>>>
>>
>> Thanks for taking a look at this Gustavo.
>>
>> In the pipeline you shared, the build-some-softmmu fails with:
>> Makefile:210: *** multiple target patterns.  Stop.
>> make: *** [/builds/gusbromero/qemu/tests/Makefile.include:50: build-tcg-tests-x86_64-softmmu] Error 2
>> make: *** Waiting for unfinished jobs....
>>
>> Is that a new bug related to current patch?
> 
> v2 was busted. Please consider this fix, which passed the test pipeline:

v1, I meant. Please consider v2 as the good one :)
  
> https://gitlab.com/gusbromero/qemu/-/pipelines/1960296034
> 
> https://mail.gnu.org/archive/html/qemu-devel/2025-07/msg06926.html


Cheers,
Gustavo


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-07-30  7:25     ` Pierrick Bouvier
@ 2025-08-04  8:39       ` Alex Bennée
  2025-08-04 16:24         ` Pierrick Bouvier
  0 siblings, 1 reply; 28+ messages in thread
From: Alex Bennée @ 2025-08-04  8:39 UTC (permalink / raw)
  To: Pierrick Bouvier
  Cc: qemu-devel, Manos Pitsidianakis, Philippe Mathieu-Daudé

Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:

> On 7/28/25 12:03 PM, Pierrick Bouvier wrote:
>> Hi Alex,
>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>> As our set of multiarch tests has grown the practice of running every
>>> plugin with every test is becoming unsustainable. If we switch to
>>> ensuring every test gets run with at least one plugin we can speed
>>> things up.
>>>
>>> Some plugins do need to be run with specific tests (for example the
>>> memory instrumentation test). We can handle this by manually adding
>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>> so we don't enable the runs when plugins are not enabled.
>>>
>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>
>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>> index a12b15637ea..18afd5be194 100644
>>> --- a/tests/tcg/Makefile.target
>>> +++ b/tests/tcg/Makefile.target
>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>    # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>    # pre-requistes manually here as we can't use stems to handle it. We
>>>    # only expand MULTIARCH_TESTS which are common on most of our targets
>>> -# to avoid an exponential explosion as new tests are added. We also
>>> -# add some special helpers the run-plugin- rules can use below.
>>> +# and rotate the plugins so we don't grow too out of control as new
>>> +# tests are added. Plugins that need to run with a specific test
>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>       ifneq ($(MULTIARCH_TESTS),)
>>> -$(foreach p,$(PLUGINS), \
>>> -	$(foreach t,$(MULTIARCH_TESTS),\
>>> -		$(eval run-plugin-$(t)-with-$(p): $t $p) \
>>> -		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>> +
>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>> +
>>> +define mod_plus_one
>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>> +endef
>>> +
>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>> +	$(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>> +	$(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>> +	$(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>> +	$(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>> +
>>>    endif # MULTIARCH_TESTS
>>>    endif # CONFIG_PLUGIN
>>>    diff --git a/tests/tcg/multiarch/Makefile.target
>>> b/tests/tcg/multiarch/Makefile.target
>>> index bfdf7197a7b..38345ff8805 100644
>>> --- a/tests/tcg/multiarch/Makefile.target
>>> +++ b/tests/tcg/multiarch/Makefile.target
>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>    TESTS += semihosting semiconsole
>>>    endif
>>>    +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>> +
>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>    # Test plugin memory access instrumentation
>>>    run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>    	PLUGIN_ARGS=$(COMMA)print-accesses=true
>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>    	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>    	$(QEMU) $<
>>>    -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>> +endif
>>>       # Update TESTS
>>>    TESTS += $(MULTIARCH_TESTS)
>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> index 5acf2700812..4171b4e6aa0 100644
>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>> @@ -71,8 +71,11 @@ endif
>>>    MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>    	run-gdbstub-untimely-packet run-gdbstub-registers
>>>    +ifeq ($(CONFIG_PLUGIN),y)
>>>    # Test plugin memory access instrumentation
>>> -run-plugin-memory-with-libmem.so: 		\
>>> -	PLUGIN_ARGS=$(COMMA)region-summary=true
>>> -run-plugin-memory-with-libmem.so: 		\
>>> -	CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>> +
>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>> +endif
>> I'm not sure how it's related, but check-tcg on aarch64 host now
>> fails
>> [1] since this series was merged, and I suspect it may be related to
>> this patch. I didn't spend time to reproduce and investigate it.
>>
>
> Reverting this patch solved the problem on my side. As well, I'm not
> sure if it's a real problem to run all plugins for all tests. At the
> moment, it takes 5 min on a slow machine with 4 cpus and a sanitized
> build, something we can probably live with for now.

It definitely is - but it really shows up on linux-user builds because
we have an increasing number of multiarch tests and its not sustainable
to increase by $NARCH * $NPLUGIN everytime a new multiarch test is
added.

>
> Unfortunately Alex is out this week, but it would be nice if another
> maintainer could make a PR reverting this patch.
>
> Regards,
> Pierrick
>
>> [1]
>> https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations
  2025-08-04  8:39       ` Alex Bennée
@ 2025-08-04 16:24         ` Pierrick Bouvier
  0 siblings, 0 replies; 28+ messages in thread
From: Pierrick Bouvier @ 2025-08-04 16:24 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Manos Pitsidianakis, Philippe Mathieu-Daudé

On 8/4/25 1:39 AM, Alex Bennée wrote:
> Pierrick Bouvier <pierrick.bouvier@linaro.org> writes:
> 
>> On 7/28/25 12:03 PM, Pierrick Bouvier wrote:
>>> Hi Alex,
>>> On 7/27/25 1:32 AM, Alex Bennée wrote:
>>>> As our set of multiarch tests has grown the practice of running every
>>>> plugin with every test is becoming unsustainable. If we switch to
>>>> ensuring every test gets run with at least one plugin we can speed
>>>> things up.
>>>>
>>>> Some plugins do need to be run with specific tests (for example the
>>>> memory instrumentation test). We can handle this by manually adding
>>>> them to EXTRA_RUNS. We also need to wrap rules in a CONFIG_PLUGIN test
>>>> so we don't enable the runs when plugins are not enabled.
>>>>
>>>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>> Message-ID: <20250725154517.3523095-12-alex.bennee@linaro.org>
>>>>
>>>> diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
>>>> index a12b15637ea..18afd5be194 100644
>>>> --- a/tests/tcg/Makefile.target
>>>> +++ b/tests/tcg/Makefile.target
>>>> @@ -173,14 +173,25 @@ PLUGINS=$(filter-out $(DISABLE_PLUGINS), \
>>>>     # We need to ensure expand the run-plugin-TEST-with-PLUGIN
>>>>     # pre-requistes manually here as we can't use stems to handle it. We
>>>>     # only expand MULTIARCH_TESTS which are common on most of our targets
>>>> -# to avoid an exponential explosion as new tests are added. We also
>>>> -# add some special helpers the run-plugin- rules can use below.
>>>> +# and rotate the plugins so we don't grow too out of control as new
>>>> +# tests are added. Plugins that need to run with a specific test
>>>> +# should ensure they add their combination to EXTRA_RUNS.
>>>>        ifneq ($(MULTIARCH_TESTS),)
>>>> -$(foreach p,$(PLUGINS), \
>>>> -	$(foreach t,$(MULTIARCH_TESTS),\
>>>> -		$(eval run-plugin-$(t)-with-$(p): $t $p) \
>>>> -		$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
>>>> +
>>>> +NUM_PLUGINS := $(words $(PLUGINS))
>>>> +NUM_TESTS := $(words $(MULTIARCH_TESTS))
>>>> +
>>>> +define mod_plus_one
>>>> +  $(shell $(PYTHON) -c "print( ($(1) % $(2)) + 1 )")
>>>> +endef
>>>> +
>>>> +$(foreach _idx, $(shell seq 1 $(NUM_TESTS)), \
>>>> +	$(eval _test := $(word $(_idx), $(MULTIARCH_TESTS))) \
>>>> +	$(eval _plugin := $(word $(call mod_plus_one, $(_idx), $(NUM_PLUGINS)), $(PLUGINS))) \
>>>> +	$(eval run-plugin-$(_test)-with-$(_plugin): $(_test) $(_plugin)) \
>>>> +	$(eval RUN_TESTS+=run-plugin-$(_test)-with-$(_plugin)))
>>>> +
>>>>     endif # MULTIARCH_TESTS
>>>>     endif # CONFIG_PLUGIN
>>>>     diff --git a/tests/tcg/multiarch/Makefile.target
>>>> b/tests/tcg/multiarch/Makefile.target
>>>> index bfdf7197a7b..38345ff8805 100644
>>>> --- a/tests/tcg/multiarch/Makefile.target
>>>> +++ b/tests/tcg/multiarch/Makefile.target
>>>> @@ -189,6 +189,10 @@ run-plugin-semiconsole-with-%:
>>>>     TESTS += semihosting semiconsole
>>>>     endif
>>>>     +test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>> +test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>> +
>>>> +ifeq ($(CONFIG_PLUGIN),y)
>>>>     # Test plugin memory access instrumentation
>>>>     run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>     	PLUGIN_ARGS=$(COMMA)print-accesses=true
>>>> @@ -197,8 +201,8 @@ run-plugin-test-plugin-mem-access-with-libmem.so: \
>>>>     	$(SRC_PATH)/tests/tcg/multiarch/check-plugin-output.sh \
>>>>     	$(QEMU) $<
>>>>     -test-plugin-mem-access: CFLAGS+=-pthread -O0
>>>> -test-plugin-mem-access: LDFLAGS+=-pthread -O0
>>>> +EXTRA_RUNS += run-plugin-test-plugin-mem-access-with-libmem.so
>>>> +endif
>>>>        # Update TESTS
>>>>     TESTS += $(MULTIARCH_TESTS)
>>>> diff --git a/tests/tcg/multiarch/system/Makefile.softmmu-target b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> index 5acf2700812..4171b4e6aa0 100644
>>>> --- a/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> +++ b/tests/tcg/multiarch/system/Makefile.softmmu-target
>>>> @@ -71,8 +71,11 @@ endif
>>>>     MULTIARCH_RUNS += run-gdbstub-memory run-gdbstub-interrupt \
>>>>     	run-gdbstub-untimely-packet run-gdbstub-registers
>>>>     +ifeq ($(CONFIG_PLUGIN),y)
>>>>     # Test plugin memory access instrumentation
>>>> -run-plugin-memory-with-libmem.so: 		\
>>>> -	PLUGIN_ARGS=$(COMMA)region-summary=true
>>>> -run-plugin-memory-with-libmem.so: 		\
>>>> -	CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>> +run-plugin-memory-with-libmem.so: memory libmem.so
>>>> +run-plugin-memory-with-libmem.so: PLUGIN_ARGS=$(COMMA)region-summary=true
>>>> +run-plugin-memory-with-libmem.so: CHECK_PLUGIN_OUTPUT_COMMAND=$(MULTIARCH_SYSTEM_SRC)/validate-memory-counts.py $@.out
>>>> +
>>>> +EXTRA_RUNS += run-plugin-memory-with-libmem.so
>>>> +endif
>>> I'm not sure how it's related, but check-tcg on aarch64 host now
>>> fails
>>> [1] since this series was merged, and I suspect it may be related to
>>> this patch. I didn't spend time to reproduce and investigate it.
>>>
>>
>> Reverting this patch solved the problem on my side. As well, I'm not
>> sure if it's a real problem to run all plugins for all tests. At the
>> moment, it takes 5 min on a slow machine with 4 cpus and a sanitized
>> build, something we can probably live with for now.
> 
> It definitely is - but it really shows up on linux-user builds because
> we have an increasing number of multiarch tests and its not sustainable
> to increase by $NARCH * $NPLUGIN everytime a new multiarch test is
> added.
>

For information, plugins tests are responsible for 65% of check-tcg time 
approximately, so this makes sense.

>>
>> Unfortunately Alex is out this week, but it would be nice if another
>> maintainer could make a PR reverting this patch.
>>
>> Regards,
>> Pierrick
>>
>>> [1]
>>> https://github.com/pbo-linaro/qemu-ci/actions/runs/16575679153/job/46879690693
> 



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 06/14] tests/functional: add hypervisor test for aarch64
  2025-07-27  8:32 ` [PULL 06/14] tests/functional: add hypervisor test for aarch64 Alex Bennée
@ 2025-08-13  7:27   ` Philippe Mathieu-Daudé
  2025-08-13  8:56     ` Alex Bennée
  0 siblings, 1 reply; 28+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-08-13  7:27 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel; +Cc: Manos Pitsidianakis

Hi Alex,

On 27/7/25 10:32, Alex Bennée wrote:
> This is a simple test case that runs an image with kvmtool and
> kvm-unit-tests which can validate virtualisation works. This is useful
> for exercising TCG but can also be applied to any nested virt setup
> which is why it doesn't specify an accelerator.
> 
> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Tested-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-ID: <20250725154517.3523095-7-alex.bennee@linaro.org>

You merged v1, not v2, was that deliberate?
https://lore.kernel.org/qemu-devel/20250724094214.93330-1-philmd@linaro.org/



^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [PULL 06/14] tests/functional: add hypervisor test for aarch64
  2025-08-13  7:27   ` Philippe Mathieu-Daudé
@ 2025-08-13  8:56     ` Alex Bennée
  0 siblings, 0 replies; 28+ messages in thread
From: Alex Bennée @ 2025-08-13  8:56 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-devel, Manos Pitsidianakis

Philippe Mathieu-Daudé <philmd@linaro.org> writes:

> Hi Alex,
>
> On 27/7/25 10:32, Alex Bennée wrote:
>> This is a simple test case that runs an image with kvmtool and
>> kvm-unit-tests which can validate virtualisation works. This is useful
>> for exercising TCG but can also be applied to any nested virt setup
>> which is why it doesn't specify an accelerator.
>> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> Tested-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>> Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-ID: <20250725154517.3523095-7-alex.bennee@linaro.org>
>
> You merged v1, not v2, was that deliberate?
> https://lore.kernel.org/qemu-devel/20250724094214.93330-1-philmd@linaro.org/

I merged my v2 from 20250725154517.3523095-7-alex.bennee@linaro.org
which addressed the same review comments.

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2025-08-13  8:57 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-27  8:32 [PULL for 10.1-rc1 00/14] documentation an testing updates Alex Bennée
2025-07-27  8:32 ` [PULL 01/14] docs/user: clarify user-mode expects the same OS Alex Bennée
2025-07-27  8:32 ` [PULL 02/14] docs/system: reword the TAP notes to remove tarball ref Alex Bennée
2025-07-27  8:32 ` [PULL 03/14] docs/user: clean up headings Alex Bennée
2025-07-27  8:32 ` [PULL 04/14] docs/user: slightly reword section on system calls Alex Bennée
2025-07-27  8:32 ` [PULL 05/14] docs/user: expand section on threading Alex Bennée
2025-07-27  8:32 ` [PULL 06/14] tests/functional: add hypervisor test for aarch64 Alex Bennée
2025-08-13  7:27   ` Philippe Mathieu-Daudé
2025-08-13  8:56     ` Alex Bennée
2025-07-27  8:32 ` [PULL 07/14] tests/tcg: skip libsyscall.so on softmmu tests Alex Bennée
2025-07-27  8:32 ` [PULL 08/14] tests/tcg: remove ADDITIONAL_PLUGINS_TESTS Alex Bennée
2025-07-27  8:32 ` [PULL 09/14] tests/tcg: don't include multiarch tests if not supported Alex Bennée
2025-07-27  8:32 ` [PULL 10/14] configure: expose PYTHON to test/tcg/config-host.mak Alex Bennée
2025-07-27  8:32 ` [PULL 11/14] tests/tcg: reduce the number of plugin tests combinations Alex Bennée
2025-07-28 19:03   ` Pierrick Bouvier
2025-07-28 20:14     ` Gustavo Romero
2025-07-31 18:58       ` Gustavo Romero
2025-07-31 19:23         ` Pierrick Bouvier
2025-07-31 19:34           ` Gustavo Romero
2025-08-01  0:29           ` Gustavo Romero
2025-08-01  0:33             ` Gustavo Romero
2025-07-30  7:25     ` Pierrick Bouvier
2025-08-04  8:39       ` Alex Bennée
2025-08-04 16:24         ` Pierrick Bouvier
2025-07-27  8:32 ` [PULL 12/14] tests/docker: add --arch-only to qemu deps for all-test-cross Alex Bennée
2025-07-27  8:32 ` [PULL 13/14] tests/docker: handle host-arch selection " Alex Bennée
2025-07-27  8:32 ` [PULL 14/14] tests/functional: expose sys.argv to unittest.main Alex Bennée
2025-07-28 15:20 ` [PULL for 10.1-rc1 00/14] documentation an testing updates Stefan Hajnoczi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).