qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation
@ 2023-06-23 12:20 Alex Bennée
  2023-06-23 12:20 ` [PATCH 01/26] gitlab: explicit set artifacts publishing criteria Alex Bennée
                   ` (25 more replies)
  0 siblings, 26 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

As softfreeze is fast approaching I thought it would be work combining
my various trees into an omnibus series to ease the review and
merging.

The testing updates exposed a number of latent leaks that confused the
oss-fuzz jobs (hence the test-fuzz addition to help debug that). This
also includes some minor plugin updates and finally some documentation
updates that clean-up and expose the QOM and QDEV APIs which are so
core to emulating anything in QEMU.

Please review.

Alex Bennée (20):
  gitlab: reduce testing scope of check-gcov
  tests/tcg: add mechanism to handle plugin arguments
  qemu-keymap: use modern name for Arabic keymap
  qemu-keymap: properly check return from xkb_keymap_mod_get_index
  scripts/oss-fuzz: add a suppression for keymap
  tests/qtests: clean-up and fix leak in generic_fuzz
  tests/docker: add test-fuzz
  Makefile: add lcitool-refresh to UNCHECKED_GOALS
  tests/lcitool: update to latest version
  tests/lcitool: add an explicit gcc-native package
  tests/lcitool: introduce qemu-minimal
  tests/docker: convert riscv64-cross to lcitool
  plugins: force slow path when plugins instrument memory ops
  plugins: fix memory leak while parsing options
  plugins: update lockstep to use g_memdup2
  docs/devel: add some front matter to the devel index
  include/migration: mark vmstate_register() as a legacy function
  include/hw/qdev-core: fixup kerneldoc annotations
  docs/devel: split qom-api reference into new file
  docs/devel: introduce some key concepts for QOM development

Ani Sinha (1):
  docs/devel: remind developers to run CI container pipeline when
    updating images

Daniel P. Berrangé (2):
  gitlab: explicit set artifacts publishing criteria
  gitlab: ensure coverage job also publishes meson log

Erik Skultety (1):
  tests/lcitool: Bump fedora container versions

Marcin Juszkiewicz (1):
  tests/avocado: update firmware to enable sbsa-ref/max

Philippe Mathieu-Daudé (1):
  docs/devel/qom.rst: Correct code style

 docs/devel/index-api.rst                      |   2 +
 docs/devel/index-process.rst                  |   2 +
 docs/devel/index-tcg.rst                      |   2 +
 docs/devel/index.rst                          |  24 +-
 docs/devel/qdev-api.rst                       |   7 +
 docs/devel/qom-api.rst                        |   9 +
 docs/devel/qom.rst                            |  54 ++-
 docs/devel/tcg.rst                            |   2 +
 docs/devel/testing.rst                        |   6 +
 Makefile                                      |   2 +-
 include/exec/cpu-all.h                        |   2 +-
 include/hw/core/cpu.h                         |  17 +
 include/hw/qdev-core.h                        | 365 ++++++++++++------
 include/migration/vmstate.h                   |   9 +-
 accel/tcg/cputlb.c                            |   4 +-
 accel/tcg/user-exec.c                         |   6 +-
 contrib/plugins/cache.c                       |   2 +-
 contrib/plugins/drcov.c                       |   2 +-
 contrib/plugins/execlog.c                     |   2 +-
 contrib/plugins/hotblocks.c                   |   2 +-
 contrib/plugins/hotpages.c                    |   2 +-
 contrib/plugins/howvec.c                      |   2 +-
 contrib/plugins/hwprofile.c                   |   2 +-
 contrib/plugins/lockstep.c                    |   4 +-
 qemu-keymap.c                                 |  24 +-
 target/arm/tcg/sve_helper.c                   |   4 -
 tests/plugin/bb.c                             |   2 +-
 tests/plugin/insn.c                           |   2 +-
 tests/plugin/mem.c                            |   2 +-
 tests/plugin/syscall.c                        |   2 +-
 tests/qtest/fuzz/generic_fuzz.c               |  11 +-
 .gitlab-ci.d/buildtest-template.yml           |   4 +-
 .gitlab-ci.d/buildtest.yml                    |   7 +-
 .gitlab-ci.d/crossbuild-template.yml          |   1 +
 .gitlab-ci.d/crossbuilds.yml                  |   2 +
 .gitlab-ci.d/opensbi.yml                      |   1 +
 pc-bios/keymaps/meson.build                   |   2 +-
 scripts/oss-fuzz/lsan_suppressions.txt        |   3 +
 tests/avocado/machine_aarch64_sbsaref.py      |  22 +-
 tests/docker/dockerfiles/alpine.docker        |   4 +-
 .../dockerfiles/debian-amd64-cross.docker     |   1 +
 .../dockerfiles/debian-arm64-cross.docker     |   1 +
 .../dockerfiles/debian-armel-cross.docker     |   1 +
 .../dockerfiles/debian-armhf-cross.docker     |   1 +
 .../dockerfiles/debian-mips64el-cross.docker  |   1 +
 .../dockerfiles/debian-mipsel-cross.docker    |   1 +
 .../dockerfiles/debian-ppc64el-cross.docker   |   1 +
 .../dockerfiles/debian-riscv64-cross.docker   | 119 +++---
 .../dockerfiles/debian-s390x-cross.docker     |   1 +
 .../dockerfiles/fedora-win32-cross.docker     |   5 +-
 .../dockerfiles/fedora-win64-cross.docker     |   5 +-
 tests/docker/dockerfiles/fedora.docker        |   4 +-
 tests/docker/test-fuzz                        |  28 ++
 tests/lcitool/libvirt-ci                      |   2 +-
 tests/lcitool/projects/qemu-minimal.yml       |  27 ++
 tests/lcitool/projects/qemu.yml               |   1 +
 tests/lcitool/refresh                         |  18 +-
 tests/tcg/Makefile.target                     |   8 +-
 tests/tcg/aarch64/Makefile.target             |   8 +
 59 files changed, 627 insertions(+), 230 deletions(-)
 create mode 100644 docs/devel/qdev-api.rst
 create mode 100644 docs/devel/qom-api.rst
 create mode 100755 tests/docker/test-fuzz
 create mode 100644 tests/lcitool/projects/qemu-minimal.yml

-- 
2.39.2



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

* [PATCH 01/26] gitlab: explicit set artifacts publishing criteria
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  7:58   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 02/26] gitlab: ensure coverage job also publishes meson log Alex Bennée
                   ` (24 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

From: Daniel P. Berrangé <berrange@redhat.com>

If not set explicitly, gitlab assumes 'when: on_success" as the
publishing criteria for artifacts. This is reasonable if the
artifact is an output deliverable of the job. This is useless
if the artifact is a log file to be used for debugging job
failures.

This change makes the desired criteria explicit for every job
that publishes artifacts.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20230503145535.91325-2-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .gitlab-ci.d/buildtest-template.yml  | 4 +++-
 .gitlab-ci.d/buildtest.yml           | 2 ++
 .gitlab-ci.d/crossbuild-template.yml | 1 +
 .gitlab-ci.d/crossbuilds.yml         | 2 ++
 .gitlab-ci.d/opensbi.yml             | 1 +
 5 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.d/buildtest-template.yml b/.gitlab-ci.d/buildtest-template.yml
index 76ff1dfcb6..c1251e4805 100644
--- a/.gitlab-ci.d/buildtest-template.yml
+++ b/.gitlab-ci.d/buildtest-template.yml
@@ -25,6 +25,7 @@
 # rebuilding all the object files we skip in the artifacts
 .native_build_artifact_template:
   artifacts:
+    when: on_success
     expire_in: 2 days
     paths:
       - build
@@ -53,6 +54,7 @@
   extends: .common_test_job_template
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
+    when: always
     expire_in: 7 days
     paths:
       - build/meson-logs/testlog.txt
@@ -68,7 +70,7 @@
     policy: pull-push
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
-    when: on_failure
+    when: always
     expire_in: 7 days
     paths:
       - build/tests/results/latest/results.xml
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 1922caf536..fcaa3869df 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -462,6 +462,7 @@ gcov:
   coverage: /^\s*lines:\s*\d+.\d+\%/
   artifacts:
     name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
+    when: on_success
     expire_in: 2 days
     reports:
       coverage_report:
@@ -587,6 +588,7 @@ pages:
     - make -C build install DESTDIR=$(pwd)/temp-install
     - mv temp-install/usr/local/share/doc/qemu/* public/
   artifacts:
+    when: on_success
     paths:
       - public
   variables:
diff --git a/.gitlab-ci.d/crossbuild-template.yml b/.gitlab-ci.d/crossbuild-template.yml
index 4f93b9e4e5..a7e34e0145 100644
--- a/.gitlab-ci.d/crossbuild-template.yml
+++ b/.gitlab-ci.d/crossbuild-template.yml
@@ -55,6 +55,7 @@
 .cross_test_artifacts:
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
+    when: always
     expire_in: 7 days
     paths:
       - build/meson-logs/testlog.txt
diff --git a/.gitlab-ci.d/crossbuilds.yml b/.gitlab-ci.d/crossbuilds.yml
index 1e0e6c7f2c..34f9df2be9 100644
--- a/.gitlab-ci.d/crossbuilds.yml
+++ b/.gitlab-ci.d/crossbuilds.yml
@@ -169,6 +169,7 @@ cross-win32-system:
     CROSS_SKIP_TARGETS: alpha-softmmu avr-softmmu hppa-softmmu m68k-softmmu
                         microblazeel-softmmu mips64el-softmmu nios2-softmmu
   artifacts:
+    when: on_success
     paths:
       - build/qemu-setup*.exe
 
@@ -184,6 +185,7 @@ cross-win64-system:
                         or1k-softmmu rx-softmmu sh4eb-softmmu sparc64-softmmu
                         tricore-softmmu xtensaeb-softmmu
   artifacts:
+    when: on_success
     paths:
       - build/qemu-setup*.exe
 
diff --git a/.gitlab-ci.d/opensbi.yml b/.gitlab-ci.d/opensbi.yml
index b4d7eef688..fd293e6c31 100644
--- a/.gitlab-ci.d/opensbi.yml
+++ b/.gitlab-ci.d/opensbi.yml
@@ -63,6 +63,7 @@ build-opensbi:
   stage: build
   needs: ['docker-opensbi']
   artifacts:
+    when: on_success
     paths: # 'artifacts.zip' will contains the following files:
       - pc-bios/opensbi-riscv32-generic-fw_dynamic.bin
       - pc-bios/opensbi-riscv64-generic-fw_dynamic.bin
-- 
2.39.2



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

* [PATCH 02/26] gitlab: ensure coverage job also publishes meson log
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
  2023-06-23 12:20 ` [PATCH 01/26] gitlab: explicit set artifacts publishing criteria Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  7:59   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 03/26] gitlab: reduce testing scope of check-gcov Alex Bennée
                   ` (23 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

From: Daniel P. Berrangé <berrange@redhat.com>

The coverage job wants to publish a coverage report on success, but the
tests might fail and in that case we need the meson logs for debugging.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20230503145535.91325-3-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .gitlab-ci.d/buildtest.yml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index fcaa3869df..528c0c62aa 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -462,9 +462,12 @@ gcov:
   coverage: /^\s*lines:\s*\d+.\d+\%/
   artifacts:
     name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
-    when: on_success
+    when: always
     expire_in: 2 days
+    paths:
+      - build/meson-logs/testlog.txt
     reports:
+      junit: build/meson-logs/testlog.junit.xml
       coverage_report:
         coverage_format: cobertura
         path: build/coverage.xml
-- 
2.39.2



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

* [PATCH 03/26] gitlab: reduce testing scope of check-gcov
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
  2023-06-23 12:20 ` [PATCH 01/26] gitlab: explicit set artifacts publishing criteria Alex Bennée
  2023-06-23 12:20 ` [PATCH 02/26] gitlab: ensure coverage job also publishes meson log Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  7:59   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 04/26] docs/devel: remind developers to run CI container pipeline when updating images Alex Bennée
                   ` (22 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

This keeps timing out on gitlab due to some qtests taking a long time.
As this is just ensuring the gcov machinery is working and not
attempting to be comprehensive lets skip qtest in this run.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .gitlab-ci.d/buildtest.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 528c0c62aa..dd5f11aa30 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -454,7 +454,7 @@ gcov:
     IMAGE: ubuntu2204
     CONFIGURE_ARGS: --enable-gcov
     TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
-    MAKE_CHECK_ARGS: check
+    MAKE_CHECK_ARGS: check-unit check-softfloat
   after_script:
     - cd build
     - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
-- 
2.39.2



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

* [PATCH 04/26] docs/devel: remind developers to run CI container pipeline when updating images
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (2 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 03/26] gitlab: reduce testing scope of check-gcov Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 05/26] tests/tcg: add mechanism to handle plugin arguments Alex Bennée
                   ` (21 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée, Ani Sinha

From: Ani Sinha <anisinha@redhat.com>

When new dependencies and packages are added to containers, its important to
run CI container generation pipelines on gitlab to make sure that there are no
obvious conflicts between packages that are being added and those that are
already present. Running CI container pipelines will make sure that there are
no such breakages before we commit the change updating the containers. Add a
line in the documentation reminding developers to run the pipeline before
submitting the change. It will also ease the life of the maintainers.

Signed-off-by: Ani Sinha <anisinha@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20230506072012.10350-1-anisinha@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 docs/devel/testing.rst | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 203facb417..8f18052ba7 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -485,6 +485,12 @@ first to contribute the mapping to the ``libvirt-ci`` project:
    `CI <https://www.qemu.org/docs/master/devel/ci.html>`__ documentation
    page on how to trigger gitlab CI pipelines on your change.
 
+ * Please also trigger gitlab container generation pipelines on your change
+   for as many OS distros as practical to make sure that there are no
+   obvious breakages when adding the new pre-requisite. Please see
+   `CI <https://www.qemu.org/docs/master/devel/ci.html>`__ documentation
+   page on how to trigger gitlab CI pipelines on your change.
+
 For enterprise distros that default to old, end-of-life versions of the
 Python runtime, QEMU uses a separate set of mappings that work with more
 recent versions.  These can be found in ``tests/lcitool/mappings.yml``.
-- 
2.39.2



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

* [PATCH 05/26] tests/tcg: add mechanism to handle plugin arguments
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (3 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 04/26] docs/devel: remind developers to run CI container pipeline when updating images Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap Alex Bennée
                   ` (20 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

We recently missed a regression that should have been picked up by
check-tcg. This was because the libmem plugin is effectively a NOP if
the user doesn't specify the type to use.

Rather than changing the default behaviour add an additional expansion
so we can take this into account in future.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 tests/tcg/Makefile.target | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index 72876cc84e..2462c26000 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -169,13 +169,17 @@ extract-plugin = $(wordlist 2, 2, $(subst -with-, ,$1))
 
 RUN_TESTS+=$(EXTRA_RUNS)
 
+# Some plugins need additional arguments above the default to fully
+# exercise things. We can define them on a per-test basis here.
+run-plugin-%-with-libmem.so: PLUGIN_ARGS=$(COMMA)inline=true$(COMMA)callback=true
+
 ifeq ($(filter %-softmmu, $(TARGET)),)
 run-%: %
 	$(call run-test, $<, $(QEMU) $(QEMU_OPTS) $<)
 
 run-plugin-%:
 	$(call run-test, $@, $(QEMU) $(QEMU_OPTS) \
-		-plugin $(PLUGIN_LIB)/$(call extract-plugin,$@) \
+		-plugin $(PLUGIN_LIB)/$(call extract-plugin,$@)$(PLUGIN_ARGS) \
 		-d plugin -D $*.pout \
 		 $(call strip-plugin,$<))
 else
@@ -189,7 +193,7 @@ run-plugin-%:
 	$(call run-test, $@, \
 	  $(QEMU) -monitor none -display none \
 		  -chardev file$(COMMA)path=$@.out$(COMMA)id=output \
-	   	  -plugin $(PLUGIN_LIB)/$(call extract-plugin,$@) \
+	   	  -plugin $(PLUGIN_LIB)/$(call extract-plugin,$@)$(PLUGIN_ARGS) \
 	    	  -d plugin -D $*.pout \
 		  $(QEMU_OPTS) $(call strip-plugin,$<))
 endif
-- 
2.39.2



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

* [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (4 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 05/26] tests/tcg: add mechanism to handle plugin arguments Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:23   ` Peter Maydell
  2023-06-23 12:20 ` [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index Alex Bennée
                   ` (19 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

The very old compatibility alias of "ar" has been removed from more
modern versions of keymap. Lets move with the times.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 pc-bios/keymaps/meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pc-bios/keymaps/meson.build b/pc-bios/keymaps/meson.build
index bff3083313..0bd8ce0077 100644
--- a/pc-bios/keymaps/meson.build
+++ b/pc-bios/keymaps/meson.build
@@ -1,5 +1,5 @@
 keymaps = {
-  'ar': '-l ar',
+  'ar': '-l ara',
   'bepo': '-l fr -v dvorak',
   'cz': '-l cz',
   'da': '-l dk',
-- 
2.39.2



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

* [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (5 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:25   ` Peter Maydell
  2023-06-23 12:20 ` [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap Alex Bennée
                   ` (18 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

We can return XKB_MOD_INVALID which rightly gets flagged by sanitisers
as an overly wide shift attempt.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 qemu-keymap.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/qemu-keymap.c b/qemu-keymap.c
index 229866e004..8c80f7a4ed 100644
--- a/qemu-keymap.c
+++ b/qemu-keymap.c
@@ -140,6 +140,18 @@ static void usage(FILE *out)
             names.options ?: "-");
 }
 
+static xkb_mod_mask_t get_mod(struct xkb_keymap *map, const char *name)
+{
+    xkb_mod_index_t mod;
+    xkb_mod_mask_t mask = 0;
+
+    mod = xkb_keymap_mod_get_index(map, name);
+    if (mod != XKB_MOD_INVALID) {
+        mask = (1 << mod);
+    }
+    return mask;
+}
+
 int main(int argc, char *argv[])
 {
     struct xkb_context *ctx;
@@ -215,14 +227,10 @@ int main(int argc, char *argv[])
                 mod, xkb_keymap_mod_get_name(map, mod));
     }
 
-    mod = xkb_keymap_mod_get_index(map, "Shift");
-    shift = (1 << mod);
-    mod = xkb_keymap_mod_get_index(map, "Control");
-    ctrl = (1 << mod);
-    mod = xkb_keymap_mod_get_index(map, "AltGr");
-    altgr = (1 << mod);
-    mod = xkb_keymap_mod_get_index(map, "NumLock");
-    numlock = (1 << mod);
+    shift = get_mod(map, "Shift");
+    ctrl = get_mod(map, "Control");
+    altgr = get_mod(map, "AltGr");
+    numlock = get_mod(map, "NumLock");
 
     state = xkb_state_new(map);
     xkb_keymap_key_for_each(map, walk_map, state);
-- 
2.39.2



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

* [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (6 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:02   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz Alex Bennée
                   ` (17 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

When updating to the latest fedora the santizer found more leaks
inside xkbmap:

  FAILED: pc-bios/keymaps/ar
  /builds/stsquad/qemu/build-oss-fuzz/qemu-keymap -f pc-bios/keymaps/ar -l ara
  =================================================================
  ==3604==ERROR: LeakSanitizer: detected memory leaks
  Direct leak of 1424 byte(s) in 1 object(s) allocated from:
      #0 0x56316418ebec in __interceptor_calloc (/builds/stsquad/qemu/build-oss-fuzz/qemu-keymap+0x127bec) (BuildId: a2ad9da3190962acaa010fa8f44a9269f9081e1c)
      #1 0x7f60d4dc067e  (/lib64/libxkbcommon.so.0+0x1c67e) (BuildId: b243a34e4e58e6a30b93771c256268b114d34b80)
      #2 0x7f60d4dc2137 in xkb_keymap_new_from_names (/lib64/libxkbcommon.so.0+0x1e137) (BuildId: b243a34e4e58e6a30b93771c256268b114d34b80)
      #3 0x5631641ca50f in main /builds/stsquad/qemu/build-oss-fuzz/../qemu-keymap.c:215:11

and many more. As we can't do anything about the library add a
suppression to keep the CI going with what its meant to be doing.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 scripts/oss-fuzz/lsan_suppressions.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/scripts/oss-fuzz/lsan_suppressions.txt b/scripts/oss-fuzz/lsan_suppressions.txt
index 02ec0a6ed5..7d90c280d0 100644
--- a/scripts/oss-fuzz/lsan_suppressions.txt
+++ b/scripts/oss-fuzz/lsan_suppressions.txt
@@ -1,2 +1,5 @@
 # The tcmalloc on Fedora37 confuses things
 leak:/lib64/libtcmalloc_minimal.so.4
+
+# libxkbcommon also leaks in qemu-keymap
+leak:/lib64/libxkbcommon.so.0
-- 
2.39.2



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

* [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (7 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:06   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 10/26] tests/docker: add test-fuzz Alex Bennée
                   ` (16 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

An update to the clang tooling detects more issues with the code
including a memory leak from the g_string_new() allocation. Clean up
the code with g_autoptr and use ARRAY_SIZE while we are at it.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/qtest/fuzz/generic_fuzz.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c
index c525d22951..a4841181cc 100644
--- a/tests/qtest/fuzz/generic_fuzz.c
+++ b/tests/qtest/fuzz/generic_fuzz.c
@@ -954,17 +954,14 @@ static void register_generic_fuzz_targets(void)
             .crossover = generic_fuzz_crossover
     });
 
-    GString *name;
+    g_autoptr(GString) name = g_string_new("");
     const generic_fuzz_config *config;
 
-    for (int i = 0;
-         i < sizeof(predefined_configs) / sizeof(generic_fuzz_config);
-         i++) {
+    for (int i = 0; i < ARRAY_SIZE(predefined_configs); i++) {
         config = predefined_configs + i;
-        name = g_string_new("generic-fuzz");
-        g_string_append_printf(name, "-%s", config->name);
+        g_string_printf(name, "generic-fuzz-%s", config->name);
         fuzz_add_target(&(FuzzTarget){
-                .name = name->str,
+                .name = g_strdup(name->str),
                 .description = "Predefined generic-fuzz config.",
                 .get_init_cmdline = generic_fuzz_predefined_config_cmdline,
                 .pre_fuzz = generic_pre_fuzz,
-- 
2.39.2



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

* [PATCH 10/26] tests/docker: add test-fuzz
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (8 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS Alex Bennée
                   ` (15 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Running the fuzzer requires some hoop jumping and some problems only
show up in containers. This basically replicates the build-oss-fuzz
job from our CI so we can run in the same containers we use in CI.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/test-fuzz | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100755 tests/docker/test-fuzz

diff --git a/tests/docker/test-fuzz b/tests/docker/test-fuzz
new file mode 100755
index 0000000000..7e506ae1f6
--- /dev/null
+++ b/tests/docker/test-fuzz
@@ -0,0 +1,28 @@
+#!/bin/bash -e
+#
+# Compile and check with oss-fuzz.
+#
+# Copyright (c) 2023 Linaro Ltd.
+#
+# Authors:
+#  Alex Bennée <alex.bennee@linaro.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+. common.rc
+
+requires_binary clang
+
+# the build script runs out of $src so we need to copy across
+cd "$BUILD_DIR"
+cp -a $QEMU_SRC .
+cd src
+mkdir build-oss-fuzz
+export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
+env CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" ./scripts/oss-fuzz/build.sh
+export ASAN_OPTIONS="fast_unwind_on_malloc=0"
+for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f | grep -v slirp); do
+        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
+        echo Testing ${fuzzer} ... ;
+        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
+done
-- 
2.39.2



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

* [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (9 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 10/26] tests/docker: add test-fuzz Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 15:10   ` Philippe Mathieu-Daudé
  2023-06-23 12:20 ` [PATCH 12/26] tests/lcitool: update to latest version Alex Bennée
                   ` (14 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

This is yet another make target you usually run in the top level of
the source directory.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index b22bf6fba1..56f165c0b2 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ quiet-command = $(quiet-@)$(call quiet-command-run,$1,$2,$3)
 
 UNCHECKED_GOALS := TAGS gtags cscope ctags dist \
     help check-help print-% \
-    docker docker-% vm-help vm-test vm-build-%
+    docker docker-% lcitool-refresh vm-help vm-test vm-build-%
 
 all:
 .PHONY: all clean distclean recurse-all dist msi FORCE
-- 
2.39.2



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

* [PATCH 12/26] tests/lcitool: update to latest version
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (10 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:08   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 13/26] tests/lcitool: Bump fedora container versions Alex Bennée
                   ` (13 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

We need this for the riscv64 and gcc-native mappings. As the older
alpine release has been dropped from the mappings we also need to bump
the version of alpine we use.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/dockerfiles/alpine.docker | 4 ++--
 tests/lcitool/libvirt-ci               | 2 +-
 tests/lcitool/refresh                  | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/docker/dockerfiles/alpine.docker b/tests/docker/dockerfiles/alpine.docker
index 0097637dca..43370f7b36 100644
--- a/tests/docker/dockerfiles/alpine.docker
+++ b/tests/docker/dockerfiles/alpine.docker
@@ -1,10 +1,10 @@
 # THIS FILE WAS AUTO-GENERATED
 #
-#  $ lcitool dockerfile --layers all alpine-316 qemu
+#  $ lcitool dockerfile --layers all alpine-318 qemu
 #
 # https://gitlab.com/libvirt/libvirt-ci
 
-FROM docker.io/library/alpine:3.16
+FROM docker.io/library/alpine:3.18
 
 RUN apk update && \
     apk upgrade && \
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
index c8971e90ac..b0f44f929a 160000
--- a/tests/lcitool/libvirt-ci
+++ b/tests/lcitool/libvirt-ci
@@ -1 +1 @@
-Subproject commit c8971e90ac169ee2b539c747f74d96c876debdf9
+Subproject commit b0f44f929a81c0a604fb7fbf8afc34d37ab0eae9
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index f1570b54df..5d36a62b10 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -115,7 +115,7 @@ try:
     #
     # Standard native builds
     #
-    generate_dockerfile("alpine", "alpine-316")
+    generate_dockerfile("alpine", "alpine-318")
     generate_dockerfile("centos8", "centos-stream-8")
     generate_dockerfile("debian-amd64", "debian-11",
                         trailer="".join(debian11_extras))
-- 
2.39.2



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

* [PATCH 13/26] tests/lcitool: Bump fedora container versions
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (11 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 12/26] tests/lcitool: update to latest version Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:09   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 14/26] tests/lcitool: add an explicit gcc-native package Alex Bennée
                   ` (12 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée, Erik Skultety

From: Erik Skultety <eskultet@redhat.com>

Fedora 37 -> 38

Signed-off-by: Erik Skultety <eskultet@redhat.com>
Message-Id: <c9b00e573a7a80fc6ce5c68595382f5c916a9195.1685528076.git.eskultet@redhat.com>
[AJB: Dropped alpine (in prev commit), reflow commit msg]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/dockerfiles/fedora-win32-cross.docker | 4 ++--
 tests/docker/dockerfiles/fedora-win64-cross.docker | 4 ++--
 tests/docker/dockerfiles/fedora.docker             | 4 ++--
 tests/lcitool/refresh                              | 6 +++---
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/tests/docker/dockerfiles/fedora-win32-cross.docker b/tests/docker/dockerfiles/fedora-win32-cross.docker
index dc72ae9cc9..a0a3cd9e5b 100644
--- a/tests/docker/dockerfiles/fedora-win32-cross.docker
+++ b/tests/docker/dockerfiles/fedora-win32-cross.docker
@@ -1,10 +1,10 @@
 # THIS FILE WAS AUTO-GENERATED
 #
-#  $ lcitool dockerfile --layers all --cross mingw32 fedora-37 qemu
+#  $ lcitool dockerfile --layers all --cross mingw32 fedora-38 qemu
 #
 # https://gitlab.com/libvirt/libvirt-ci
 
-FROM registry.fedoraproject.org/fedora:37
+FROM registry.fedoraproject.org/fedora:38
 
 RUN dnf install -y nosync && \
     printf '#!/bin/sh\n\
diff --git a/tests/docker/dockerfiles/fedora-win64-cross.docker b/tests/docker/dockerfiles/fedora-win64-cross.docker
index 7eb4a5dba2..b6c1a6a339 100644
--- a/tests/docker/dockerfiles/fedora-win64-cross.docker
+++ b/tests/docker/dockerfiles/fedora-win64-cross.docker
@@ -1,10 +1,10 @@
 # THIS FILE WAS AUTO-GENERATED
 #
-#  $ lcitool dockerfile --layers all --cross mingw64 fedora-37 qemu
+#  $ lcitool dockerfile --layers all --cross mingw64 fedora-38 qemu
 #
 # https://gitlab.com/libvirt/libvirt-ci
 
-FROM registry.fedoraproject.org/fedora:37
+FROM registry.fedoraproject.org/fedora:38
 
 RUN dnf install -y nosync && \
     printf '#!/bin/sh\n\
diff --git a/tests/docker/dockerfiles/fedora.docker b/tests/docker/dockerfiles/fedora.docker
index 3a69eefdda..8a35a17617 100644
--- a/tests/docker/dockerfiles/fedora.docker
+++ b/tests/docker/dockerfiles/fedora.docker
@@ -1,10 +1,10 @@
 # THIS FILE WAS AUTO-GENERATED
 #
-#  $ lcitool dockerfile --layers all fedora-37 qemu
+#  $ lcitool dockerfile --layers all fedora-38 qemu
 #
 # https://gitlab.com/libvirt/libvirt-ci
 
-FROM registry.fedoraproject.org/fedora:37
+FROM registry.fedoraproject.org/fedora:38
 
 RUN dnf install -y nosync && \
     printf '#!/bin/sh\n\
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 5d36a62b10..5e06fb2cf5 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -119,7 +119,7 @@ try:
     generate_dockerfile("centos8", "centos-stream-8")
     generate_dockerfile("debian-amd64", "debian-11",
                         trailer="".join(debian11_extras))
-    generate_dockerfile("fedora", "fedora-37")
+    generate_dockerfile("fedora", "fedora-38")
     generate_dockerfile("opensuse-leap", "opensuse-leap-15")
     generate_dockerfile("ubuntu2004", "ubuntu-2004")
     generate_dockerfile("ubuntu2204", "ubuntu-2204")
@@ -169,12 +169,12 @@ try:
                         trailer=cross_build("s390x-linux-gnu-",
                                             "s390x-softmmu,s390x-linux-user"))
 
-    generate_dockerfile("fedora-win32-cross", "fedora-37",
+    generate_dockerfile("fedora-win32-cross", "fedora-38",
                         cross="mingw32",
                         trailer=cross_build("i686-w64-mingw32-",
                                             "i386-softmmu"))
 
-    generate_dockerfile("fedora-win64-cross", "fedora-37",
+    generate_dockerfile("fedora-win64-cross", "fedora-38",
                         cross="mingw64",
                         trailer=cross_build("x86_64-w64-mingw32-",
                                             "x86_64-softmmu"))
-- 
2.39.2



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

* [PATCH 14/26] tests/lcitool: add an explicit gcc-native package
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (12 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 13/26] tests/lcitool: Bump fedora container versions Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:10   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 15/26] tests/lcitool: introduce qemu-minimal Alex Bennée
                   ` (11 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

We need a native compiler to build the hexagon codegen tools. In our
current images we already have a gcc as a side effect of a broken
dependency between gcovr and lcov but this will be fixed when we move
to bookworm. See
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=987818 for details.

Update the packages while we are at it.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/dockerfiles/debian-amd64-cross.docker    | 1 +
 tests/docker/dockerfiles/debian-arm64-cross.docker    | 1 +
 tests/docker/dockerfiles/debian-armel-cross.docker    | 1 +
 tests/docker/dockerfiles/debian-armhf-cross.docker    | 1 +
 tests/docker/dockerfiles/debian-mips64el-cross.docker | 1 +
 tests/docker/dockerfiles/debian-mipsel-cross.docker   | 1 +
 tests/docker/dockerfiles/debian-ppc64el-cross.docker  | 1 +
 tests/docker/dockerfiles/debian-s390x-cross.docker    | 1 +
 tests/docker/dockerfiles/fedora-win32-cross.docker    | 1 +
 tests/docker/dockerfiles/fedora-win64-cross.docker    | 1 +
 tests/lcitool/projects/qemu.yml                       | 1 +
 11 files changed, 11 insertions(+)

diff --git a/tests/docker/dockerfiles/debian-amd64-cross.docker b/tests/docker/dockerfiles/debian-amd64-cross.docker
index 40a2b6acc4..016c2321f1 100644
--- a/tests/docker/dockerfiles/debian-amd64-cross.docker
+++ b/tests/docker/dockerfiles/debian-amd64-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-arm64-cross.docker b/tests/docker/dockerfiles/debian-arm64-cross.docker
index c99300bbfa..3c114efa11 100644
--- a/tests/docker/dockerfiles/debian-arm64-cross.docker
+++ b/tests/docker/dockerfiles/debian-arm64-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-armel-cross.docker b/tests/docker/dockerfiles/debian-armel-cross.docker
index 5db5c78b31..dfbd47db89 100644
--- a/tests/docker/dockerfiles/debian-armel-cross.docker
+++ b/tests/docker/dockerfiles/debian-armel-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-armhf-cross.docker b/tests/docker/dockerfiles/debian-armhf-cross.docker
index ae6600b25f..4e0084e896 100644
--- a/tests/docker/dockerfiles/debian-armhf-cross.docker
+++ b/tests/docker/dockerfiles/debian-armhf-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-mips64el-cross.docker b/tests/docker/dockerfiles/debian-mips64el-cross.docker
index daa2d48e36..88adf333e9 100644
--- a/tests/docker/dockerfiles/debian-mips64el-cross.docker
+++ b/tests/docker/dockerfiles/debian-mips64el-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-mipsel-cross.docker b/tests/docker/dockerfiles/debian-mipsel-cross.docker
index 5af04e2054..256e8b5dfe 100644
--- a/tests/docker/dockerfiles/debian-mipsel-cross.docker
+++ b/tests/docker/dockerfiles/debian-mipsel-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-ppc64el-cross.docker b/tests/docker/dockerfiles/debian-ppc64el-cross.docker
index 1eeba7fcab..4d19cd2bd7 100644
--- a/tests/docker/dockerfiles/debian-ppc64el-cross.docker
+++ b/tests/docker/dockerfiles/debian-ppc64el-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/debian-s390x-cross.docker b/tests/docker/dockerfiles/debian-s390x-cross.docker
index 52e89a6dab..642bbde3d1 100644
--- a/tests/docker/dockerfiles/debian-s390x-cross.docker
+++ b/tests/docker/dockerfiles/debian-s390x-cross.docker
@@ -24,6 +24,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
                       exuberant-ctags \
                       findutils \
                       flex \
+                      gcc \
                       gcovr \
                       gettext \
                       git \
diff --git a/tests/docker/dockerfiles/fedora-win32-cross.docker b/tests/docker/dockerfiles/fedora-win32-cross.docker
index a0a3cd9e5b..e3dfd68bed 100644
--- a/tests/docker/dockerfiles/fedora-win32-cross.docker
+++ b/tests/docker/dockerfiles/fedora-win32-cross.docker
@@ -29,6 +29,7 @@ exec "$@"\n' > /usr/bin/nosync && \
                diffutils \
                findutils \
                flex \
+               gcc \
                gcovr \
                git \
                glib2-devel \
diff --git a/tests/docker/dockerfiles/fedora-win64-cross.docker b/tests/docker/dockerfiles/fedora-win64-cross.docker
index b6c1a6a339..0e15c9643a 100644
--- a/tests/docker/dockerfiles/fedora-win64-cross.docker
+++ b/tests/docker/dockerfiles/fedora-win64-cross.docker
@@ -29,6 +29,7 @@ exec "$@"\n' > /usr/bin/nosync && \
                diffutils \
                findutils \
                flex \
+               gcc \
                gcovr \
                git \
                glib2-devel \
diff --git a/tests/lcitool/projects/qemu.yml b/tests/lcitool/projects/qemu.yml
index 566db8313b..21fd3d2cf9 100644
--- a/tests/lcitool/projects/qemu.yml
+++ b/tests/lcitool/projects/qemu.yml
@@ -24,6 +24,7 @@ packages:
  - fuse3
  - g++
  - gcc
+ - gcc-native
  - gcovr
  - gettext
  - glib2
-- 
2.39.2



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

* [PATCH 15/26] tests/lcitool: introduce qemu-minimal
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (13 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 14/26] tests/lcitool: add an explicit gcc-native package Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:14   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool Alex Bennée
                   ` (10 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

This is a very bare bones set of dependencies for a minimal build of
QEMU. This will be useful for bootstrapping cross compile images based
on things like Debian Sid where stuff isn't always in sync.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/lcitool/projects/qemu-minimal.yml | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 tests/lcitool/projects/qemu-minimal.yml

diff --git a/tests/lcitool/projects/qemu-minimal.yml b/tests/lcitool/projects/qemu-minimal.yml
new file mode 100644
index 0000000000..507f1f6881
--- /dev/null
+++ b/tests/lcitool/projects/qemu-minimal.yml
@@ -0,0 +1,23 @@
+# Very minimal set of qemu packages, used for early bootstrap
+---
+packages:
+ - bash
+ - bc
+ - bison
+ - flex
+ - g++
+ - gcc
+ - gcc-native
+ - glib2
+ - glib2-native
+ - glib2-static
+ - libc-static
+ - libfdt
+ - libffi
+ - make
+ - meson
+ - ninja
+ - pixman
+ - pkg-config
+ - python3
+ - python3-venv
-- 
2.39.2



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

* [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (14 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 15/26] tests/lcitool: introduce qemu-minimal Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:16   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max Alex Bennée
                   ` (9 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

We still need to base this on Debian Sid until riscv64 is promoted to
a release architecture (or another distro provides a full cross
compile target). We use the new qemu-minimal project description to
avoid bringing in all the extra dependencies because every extra
package is another chance for sid to fail.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .../dockerfiles/debian-riscv64-cross.docker   | 119 +++++++++++-------
 tests/lcitool/projects/qemu-minimal.yml       |   4 +
 tests/lcitool/refresh                         |  10 +-
 3 files changed, 87 insertions(+), 46 deletions(-)

diff --git a/tests/docker/dockerfiles/debian-riscv64-cross.docker b/tests/docker/dockerfiles/debian-riscv64-cross.docker
index 081404e014..a2d879ee1f 100644
--- a/tests/docker/dockerfiles/debian-riscv64-cross.docker
+++ b/tests/docker/dockerfiles/debian-riscv64-cross.docker
@@ -1,54 +1,85 @@
+# THIS FILE WAS AUTO-GENERATED
 #
-# Docker cross-compiler target for riscv64
+#  $ lcitool dockerfile --layers all --cross riscv64 debian-sid qemu-minimal
 #
-# Currently the only distro that gets close to cross compiling riscv64
-# images is Debian Sid (with unofficial ports). As this is a moving
-# target we keep the library list minimal and are aiming to migrate
-# from this hack as soon as we are able.
-#
-FROM docker.io/library/debian:sid-slim
+# https://gitlab.com/libvirt/libvirt-ci
 
-# Add ports
-RUN apt update && \
-    DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata && \
-    DEBIAN_FRONTEND=noninteractive eatmydata apt update -yy && \
-    DEBIAN_FRONTEND=noninteractive eatmydata apt upgrade -yy
-
-# Install common build utilities
-RUN DEBIAN_FRONTEND=noninteractive eatmydata apt install -yy \
-    bison \
-    bc \
-    build-essential \
-    ca-certificates \
-    debian-ports-archive-keyring \
-    dpkg-dev \
-    flex \
-    gettext \
-    git \
-    libglib2.0-dev \
-    ninja-build \
-    pkg-config \
-    python3 \
-    python3-venv
+FROM docker.io/library/debian:sid-slim
 
-# Add ports and riscv64 architecture
-RUN echo "deb http://ftp.ports.debian.org/debian-ports/ sid main" >> /etc/apt/sources.list
-RUN dpkg --add-architecture riscv64
+RUN export DEBIAN_FRONTEND=noninteractive && \
+    apt-get update && \
+    apt-get install -y eatmydata && \
+    eatmydata apt-get dist-upgrade -y && \
+    eatmydata apt-get install --no-install-recommends -y \
+                      bash \
+                      bc \
+                      bison \
+                      ca-certificates \
+                      ccache \
+                      findutils \
+                      flex \
+                      gcc \
+                      git \
+                      libglib2.0-dev \
+                      locales \
+                      make \
+                      meson \
+                      ninja-build \
+                      pkgconf \
+                      python3 \
+                      python3-venv \
+                      sed \
+                      tar && \
+    eatmydata apt-get autoremove -y && \
+    eatmydata apt-get autoclean -y && \
+    sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
+    dpkg-reconfigure locales
 
-# Duplicate deb line as deb-src
-RUN cat /etc/apt/sources.list | sed "s/^deb\ /deb-src /" >> /etc/apt/sources.list
+ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
+ENV LANG "en_US.UTF-8"
+ENV MAKE "/usr/bin/make"
+ENV NINJA "/usr/bin/ninja"
+ENV PYTHON "/usr/bin/python3"
 
-RUN apt update && \
-    DEBIAN_FRONTEND=noninteractive eatmydata \
-    apt install -y --no-install-recommends \
-         gcc-riscv64-linux-gnu \
-         libc6-dev-riscv64-cross \
-         libfdt-dev:riscv64 \
-         libffi-dev:riscv64 \
-         libglib2.0-dev:riscv64 \
-         libpixman-1-dev:riscv64
+RUN export DEBIAN_FRONTEND=noninteractive && \
+    dpkg --add-architecture riscv64 && \
+    eatmydata apt-get install debian-ports-archive-keyring && \
+    eatmydata echo 'deb http://ftp.ports.debian.org/debian-ports/ sid main' > /etc/apt/sources.list.d/ports.list && \
+    eatmydata echo 'deb http://ftp.ports.debian.org/debian-ports/ unreleased main' >> /etc/apt/sources.list.d/ports.list && \
+    eatmydata apt-get update && \
+    eatmydata apt-get dist-upgrade -y && \
+    eatmydata apt-get install --no-install-recommends -y dpkg-dev && \
+    eatmydata apt-get install --no-install-recommends -y \
+                      g++-riscv64-linux-gnu \
+                      gcc-riscv64-linux-gnu \
+                      libc6-dev:riscv64 \
+                      libfdt-dev:riscv64 \
+                      libffi-dev:riscv64 \
+                      libglib2.0-dev:riscv64 \
+                      libpixman-1-dev:riscv64 && \
+    eatmydata apt-get autoremove -y && \
+    eatmydata apt-get autoclean -y && \
+    mkdir -p /usr/local/share/meson/cross && \
+    printf "[binaries]\n\
+c = '/usr/bin/riscv64-linux-gnu-gcc'\n\
+ar = '/usr/bin/riscv64-linux-gnu-gcc-ar'\n\
+strip = '/usr/bin/riscv64-linux-gnu-strip'\n\
+pkgconfig = '/usr/bin/riscv64-linux-gnu-pkg-config'\n\
+\n\
+[host_machine]\n\
+system = 'linux'\n\
+cpu_family = 'riscv64'\n\
+cpu = 'riscv64'\n\
+endian = 'little'\n" > /usr/local/share/meson/cross/riscv64-linux-gnu && \
+    dpkg-query --showformat '${Package}_${Version}_${Architecture}\n' --show > /packages.txt && \
+    mkdir -p /usr/libexec/ccache-wrappers && \
+    ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/riscv64-linux-gnu-c++ && \
+    ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/riscv64-linux-gnu-cc && \
+    ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/riscv64-linux-gnu-g++ && \
+    ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/riscv64-linux-gnu-gcc
 
-# Specify the cross prefix for this image (see tests/docker/common.rc)
+ENV ABI "riscv64-linux-gnu"
+ENV MESON_OPTS "--cross-file=riscv64-linux-gnu"
 ENV QEMU_CONFIGURE_OPTS --cross-prefix=riscv64-linux-gnu-
 ENV DEF_TARGET_LIST riscv64-softmmu,riscv64-linux-user
 # As a final step configure the user (if env is defined)
diff --git a/tests/lcitool/projects/qemu-minimal.yml b/tests/lcitool/projects/qemu-minimal.yml
index 507f1f6881..a977a51ab6 100644
--- a/tests/lcitool/projects/qemu-minimal.yml
+++ b/tests/lcitool/projects/qemu-minimal.yml
@@ -4,6 +4,8 @@ packages:
  - bash
  - bc
  - bison
+ - ccache
+ - findutils
  - flex
  - g++
  - gcc
@@ -21,3 +23,5 @@ packages:
  - pkg-config
  - python3
  - python3-venv
+ - sed
+ - tar
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 5e06fb2cf5..b54566edcc 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -63,12 +63,12 @@ add_user_mapping = [
     "  id ${USER} 2>/dev/null || useradd -u ${UID} -U ${USER}; fi\n"
 ]
 
-def generate_dockerfile(host, target, cross=None, trailer=None):
+def generate_dockerfile(host, target, project="qemu", cross=None, trailer=None):
     filename = Path(src_dir, "tests", "docker", "dockerfiles", host + ".docker")
     cmd = lcitool_cmd + ["dockerfile"]
     if cross is not None:
         cmd.extend(["--cross", cross])
-    cmd.extend([target, "qemu"])
+    cmd.extend([target, project])
 
     if trailer is not None:
         trailer += "\n".join(add_user_mapping)
@@ -164,6 +164,12 @@ try:
                         trailer=cross_build("powerpc64le-linux-gnu-",
                                             "ppc64-softmmu,ppc64-linux-user"))
 
+    generate_dockerfile("debian-riscv64-cross", "debian-sid",
+                        project="qemu-minimal",
+                        cross="riscv64",
+                        trailer=cross_build("riscv64-linux-gnu-",
+                                            "riscv64-softmmu,riscv64-linux-user"))
+
     generate_dockerfile("debian-s390x-cross", "debian-11",
                         cross="s390x",
                         trailer=cross_build("s390x-linux-gnu-",
-- 
2.39.2



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

* [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (15 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 15:14   ` Philippe Mathieu-Daudé
  2023-06-23 12:20 ` [PATCH 18/26] plugins: force slow path when plugins instrument memory ops Alex Bennée
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

From: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>

Update prebuilt firmware images to have TF-A with FEAT_FGT support
enabled. This allowed us to enable test for "max" cpu in sbsa-ref
machine.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
Message-Id: <20230530152240.79160-1-marcin.juszkiewicz@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/avocado/machine_aarch64_sbsaref.py | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/tests/avocado/machine_aarch64_sbsaref.py b/tests/avocado/machine_aarch64_sbsaref.py
index 0a79fa7ab6..35f8042416 100644
--- a/tests/avocado/machine_aarch64_sbsaref.py
+++ b/tests/avocado/machine_aarch64_sbsaref.py
@@ -29,23 +29,23 @@ def fetch_firmware(self):
         """
         Flash volumes generated using:
 
-        - Fedora GNU Toolchain version 12.2.1 20220819 (Red Hat Cross 12.2.1-2)
+        - Fedora GNU Toolchain version 13.1.1 20230511 (Red Hat 13.1.1-2)
 
         - Trusted Firmware-A
-          https://github.com/ARM-software/arm-trusted-firmware/tree/5fdb2e54
+          https://github.com/ARM-software/arm-trusted-firmware/tree/c0d8ee38
 
         - Tianocore EDK II
-          https://github.com/tianocore/edk2/tree/494127613b
-          https://github.com/tianocore/edk2-non-osi/tree/41876073
-          https://github.com/tianocore/edk2-platforms/tree/8efa4f42
+          https://github.com/tianocore/edk2/tree/0f9283429dd4
+          https://github.com/tianocore/edk2-non-osi/tree/f0bb00937ad6
+          https://github.com/tianocore/edk2-platforms/tree/7880b92e2a04
         """
 
         # Secure BootRom (TF-A code)
         fs0_xz_url = (
-            "https://fileserver.linaro.org/s/ATnSmq6k8SoXgbH/"
+            "https://fileserver.linaro.org/s/HrYMCjP7MEccjRP/"
             "download/SBSA_FLASH0.fd.xz"
         )
-        fs0_xz_hash = "a210a09692bcbe0a3743ffd0df44e80e0c7ad8ab"
+        fs0_xz_hash = "447eff64a90b84ce47703c6ec41fbfc25befaaea"
         tar_xz_path = self.fetch_asset(fs0_xz_url, asset_hash=fs0_xz_hash)
         archive.extract(tar_xz_path, self.workdir)
         fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
@@ -93,15 +93,15 @@ def test_sbsaref_edk2_firmware(self):
 
         # AP Trusted ROM
         wait_for_console_pattern(self, "Booting Trusted Firmware")
-        wait_for_console_pattern(self, "BL1: v2.8(release):v2.8")
+        wait_for_console_pattern(self, "BL1: v2.9(release):v2.9")
         wait_for_console_pattern(self, "BL1: Booting BL2")
 
         # Trusted Boot Firmware
-        wait_for_console_pattern(self, "BL2: v2.8(release)")
+        wait_for_console_pattern(self, "BL2: v2.9(release)")
         wait_for_console_pattern(self, "Booting BL31")
 
         # EL3 Runtime Software
-        wait_for_console_pattern(self, "BL31: v2.8(release)")
+        wait_for_console_pattern(self, "BL31: v2.9(release)")
 
         # Non-trusted Firmware
         wait_for_console_pattern(self, "UEFI firmware (version 1.0")
@@ -150,7 +150,7 @@ def test_sbsaref_alpine_linux_neoverse_n1(self):
         """
         self.boot_alpine_linux("neoverse-n1")
 
-    @skip("requires TF-A update to handle FEAT_FGT")
+    @skipUnless(os.getenv("AVOCADO_TIMEOUT_EXPECTED"), "Test might timeout")
     def test_sbsaref_alpine_linux_max(self):
         """
         :avocado: tags=cpu:max
-- 
2.39.2



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

* [PATCH 18/26] plugins: force slow path when plugins instrument memory ops
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (16 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 19/26] plugins: fix memory leak while parsing options Alex Bennée
                   ` (7 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée, Robert Henry,
	Aaron Lindsay

The lack of SVE memory instrumentation has been an omission in plugin
handling since it was introduced. Fortunately we can utilise the
probe_* functions to force all all memory access to follow the slow
path. We do this by checking the access type and presence of plugin
memory callbacks and if set return the TLB_MMIO flag.

We have to jump through a few hoops in user mode to re-use the flag
but it was the desired effect:

 ./qemu-system-aarch64 -display none -serial mon:stdio \
   -M virt -cpu max -semihosting-config enable=on \
   -kernel ./tests/tcg/aarch64-softmmu/memory-sve \
   -plugin ./contrib/plugins/libexeclog.so,ifilter=st1w,afilter=0x40001808 -d plugin

gives (disas doesn't currently understand st1w):

  0, 0x40001808, 0xe54342a0, ".byte 0xa0, 0x42, 0x43, 0xe5", store, 0x40213010, RAM, store, 0x40213014, RAM, store, 0x40213018, RAM

And for user-mode:

  ./qemu-aarch64 \
    -plugin contrib/plugins/libexeclog.so,afilter=0x4007c0 \
    -d plugin \
    ./tests/tcg/aarch64-linux-user/sha512-sve

gives:

  1..10
  ok 1 - do_test(&tests[i])
  0, 0x4007c0, 0xa4004b80, ".byte 0x80, 0x4b, 0x00, 0xa4", load, 0x5500800370, load, 0x5500800371, load, 0x5500800372, load, 0x5500800373, load, 0x5500800374, load, 0x5500800375, load, 0x5500800376, load, 0x5500800377, load, 0x5500800378, load, 0x5500800379, load, 0x550080037a, load, 0x550080037b, load, 0x550080037c, load, 0x550080037d, load, 0x550080037e, load, 0x550080037f, load, 0x5500800380, load, 0x5500800381, load, 0x5500800382, load, 0x5500800383, load, 0x5500800384, load, 0x5500800385, load, 0x5500800386, lo
  ad, 0x5500800387, load, 0x5500800388, load, 0x5500800389, load, 0x550080038a, load, 0x550080038b, load, 0x550080038c, load, 0x550080038d, load, 0x550080038e, load, 0x550080038f, load, 0x5500800390, load, 0x5500800391, load, 0x5500800392, load, 0x5500800393, load, 0x5500800394, load, 0x5500800395, load, 0x5500800396, load, 0x5500800397, load, 0x5500800398, load, 0x5500800399, load, 0x550080039a, load, 0x550080039b, load, 0x550080039c, load, 0x550080039d, load, 0x550080039e, load, 0x550080039f, load, 0x55008003a0, load, 0x55008003a1, load, 0x55008003a2, load, 0x55008003a3, load, 0x55008003a4, load, 0x55008003a5, load, 0x55008003a6, load, 0x55008003a7, load, 0x55008003a8, load, 0x55008003a9, load, 0x55008003aa, load, 0x55008003ab, load, 0x55008003ac, load, 0x55008003ad, load, 0x55008003ae, load, 0x55008003af

(4007c0 is the ld1b in the sha512-sve)

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Robert Henry <robhenry@microsoft.com>
Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
---
 include/exec/cpu-all.h            |  2 +-
 include/hw/core/cpu.h             | 17 +++++++++++++++++
 accel/tcg/cputlb.c                |  4 +++-
 accel/tcg/user-exec.c             |  6 +++++-
 target/arm/tcg/sve_helper.c       |  4 ----
 tests/tcg/aarch64/Makefile.target |  8 ++++++++
 6 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
index 09bf4c0cc6..2b10173c61 100644
--- a/include/exec/cpu-all.h
+++ b/include/exec/cpu-all.h
@@ -301,7 +301,7 @@ CPUArchState *cpu_copy(CPUArchState *env);
  * be signaled by probe_access_flags().
  */
 #define TLB_INVALID_MASK    (1 << (TARGET_PAGE_BITS_MIN - 1))
-#define TLB_MMIO            0
+#define TLB_MMIO            (1 << (TARGET_PAGE_BITS_MIN - 2))
 #define TLB_WATCHPOINT      0
 
 #else
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 4871ad85f0..21c672ae4e 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -980,6 +980,23 @@ void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint);
 void cpu_watchpoint_remove_all(CPUState *cpu, int mask);
 #endif
 
+/**
+ * cpu_plugin_mem_cbs_enabled() - are plugin memory callbacks enabled?
+ * @cs: CPUState pointer
+ *
+ * The memory callbacks are installed if a plugin has instrumented an
+ * instruction for memory. This can be useful to know if you want to
+ * force a slow path for a series of memory accesses.
+ */
+static inline bool cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
+{
+#ifdef CONFIG_PLUGIN
+    return !!cpu->plugin_mem_cbs;
+#else
+    return false;
+#endif
+}
+
 /**
  * cpu_get_address_space:
  * @cpu: CPU to get address space from
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 14ce97c33b..e2888a7e7a 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -1544,7 +1544,9 @@ static int probe_access_internal(CPUArchState *env, target_ulong addr,
     *pfull = &env_tlb(env)->d[mmu_idx].fulltlb[index];
 
     /* Fold all "mmio-like" bits into TLB_MMIO.  This is not RAM.  */
-    if (unlikely(flags & ~(TLB_WATCHPOINT | TLB_NOTDIRTY))) {
+    if (unlikely(flags & ~(TLB_WATCHPOINT | TLB_NOTDIRTY))
+        ||
+        (access_type != MMU_INST_FETCH && cpu_plugin_mem_cbs_enabled(env_cpu(env)))) {
         *phost = NULL;
         return TLB_MMIO;
     }
diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c
index dc8d6b5d40..633eee7699 100644
--- a/accel/tcg/user-exec.c
+++ b/accel/tcg/user-exec.c
@@ -745,6 +745,10 @@ static int probe_access_internal(CPUArchState *env, target_ulong addr,
     if (guest_addr_valid_untagged(addr)) {
         int page_flags = page_get_flags(addr);
         if (page_flags & acc_flag) {
+            if ((acc_flag == PAGE_READ || acc_flag == PAGE_WRITE)
+                && cpu_plugin_mem_cbs_enabled(env_cpu(env))) {
+                return TLB_MMIO;
+            }
             return 0; /* success */
         }
         maperr = !(page_flags & PAGE_VALID);
@@ -767,7 +771,7 @@ int probe_access_flags(CPUArchState *env, target_ulong addr, int size,
 
     g_assert(-(addr | TARGET_PAGE_MASK) >= size);
     flags = probe_access_internal(env, addr, size, access_type, nonfault, ra);
-    *phost = flags ? NULL : g2h(env_cpu(env), addr);
+    *phost = (flags & TLB_INVALID_MASK) ? NULL : g2h(env_cpu(env), addr);
     return flags;
 }
 
diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c
index 0097522470..7c103fc9f7 100644
--- a/target/arm/tcg/sve_helper.c
+++ b/target/arm/tcg/sve_helper.c
@@ -5688,9 +5688,6 @@ void sve_ldN_r(CPUARMState *env, uint64_t *vg, const target_ulong addr,
 
     flags = info.page[0].flags | info.page[1].flags;
     if (unlikely(flags != 0)) {
-#ifdef CONFIG_USER_ONLY
-        g_assert_not_reached();
-#else
         /*
          * At least one page includes MMIO.
          * Any bus operation can fail with cpu_transaction_failed,
@@ -5727,7 +5724,6 @@ void sve_ldN_r(CPUARMState *env, uint64_t *vg, const target_ulong addr,
             memcpy(&env->vfp.zregs[(rd + i) & 31], &scratch[i], reg_max);
         }
         return;
-#endif
     }
 
     /* The entire operation is in RAM, on valid pages. */
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index 3430fd3cd8..cec1d4b287 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -91,6 +91,14 @@ sha512-vector: sha512.c
 
 TESTS += sha512-vector
 
+ifneq ($(CROSS_CC_HAS_SVE),)
+sha512-sve: CFLAGS=-O3 -march=armv8.1-a+sve
+sha512-sve: sha512.c
+	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
+
+TESTS += sha512-sve
+endif
+
 ifeq ($(HOST_GDB_SUPPORTS_ARCH),y)
 GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py
 
-- 
2.39.2



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

* [PATCH 19/26] plugins: fix memory leak while parsing options
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (17 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 18/26] plugins: force slow path when plugins instrument memory ops Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:24   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 20/26] plugins: update lockstep to use g_memdup2 Alex Bennée
                   ` (6 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

It was hard to track down this leak as it was an internal allocation
by glib and the backtraces did not give much away. The autofree was
freeing the allocation with g_free() but not taking care of the
individual strings. They should have been freed with g_strfreev()
instead.

Searching the glib source code for the correct string free function
led to:

  G_DEFINE_AUTO_CLEANUP_FREE_FUNC(GStrv, g_strfreev, NULL)

and indeed if you read to the bottom of the documentation page you
will find:

  typedef gchar** GStrv;

  A typedef alias for gchar**. This is mostly useful when used together with g_auto().

So fix up all the g_autofree g_strsplit case that smugly thought they
had de-allocation covered.

Message-Id: <20230519170454.2353945-3-alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/cache.c     | 2 +-
 contrib/plugins/drcov.c     | 2 +-
 contrib/plugins/execlog.c   | 2 +-
 contrib/plugins/hotblocks.c | 2 +-
 contrib/plugins/hotpages.c  | 2 +-
 contrib/plugins/howvec.c    | 2 +-
 contrib/plugins/hwprofile.c | 2 +-
 contrib/plugins/lockstep.c  | 2 +-
 tests/plugin/bb.c           | 2 +-
 tests/plugin/insn.c         | 2 +-
 tests/plugin/mem.c          | 2 +-
 tests/plugin/syscall.c      | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c
index 2e25184a7f..5036213f1b 100644
--- a/contrib/plugins/cache.c
+++ b/contrib/plugins/cache.c
@@ -772,7 +772,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
 
     for (i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
 
         if (g_strcmp0(tokens[0], "iblksize") == 0) {
             l1_iblksize = STRTOLL(tokens[1]);
diff --git a/contrib/plugins/drcov.c b/contrib/plugins/drcov.c
index b4a855adaf..686ae0a537 100644
--- a/contrib/plugins/drcov.c
+++ b/contrib/plugins/drcov.c
@@ -148,7 +148,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
                         int argc, char **argv)
 {
     for (int i = 0; i < argc; i++) {
-        g_autofree char **tokens = g_strsplit(argv[i], "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(argv[i], "=", 2);
         if (g_strcmp0(tokens[0], "filename") == 0) {
             file_name = g_strdup(tokens[1]);
         }
diff --git a/contrib/plugins/execlog.c b/contrib/plugins/execlog.c
index e255bd21fd..7129d526f8 100644
--- a/contrib/plugins/execlog.c
+++ b/contrib/plugins/execlog.c
@@ -227,7 +227,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (int i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
         if (g_strcmp0(tokens[0], "ifilter") == 0) {
             parse_insn_match(tokens[1]);
         } else if (g_strcmp0(tokens[0], "afilter") == 0) {
diff --git a/contrib/plugins/hotblocks.c b/contrib/plugins/hotblocks.c
index 062200a7a4..6b74d25fea 100644
--- a/contrib/plugins/hotblocks.c
+++ b/contrib/plugins/hotblocks.c
@@ -135,7 +135,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
 {
     for (int i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
         if (g_strcmp0(tokens[0], "inline") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_inline)) {
                 fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
diff --git a/contrib/plugins/hotpages.c b/contrib/plugins/hotpages.c
index 0d12910af6..8316ae50c7 100644
--- a/contrib/plugins/hotpages.c
+++ b/contrib/plugins/hotpages.c
@@ -169,7 +169,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
 
     for (i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", -1);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", -1);
 
         if (g_strcmp0(tokens[0], "sortby") == 0) {
             if (g_strcmp0(tokens[1], "reads") == 0) {
diff --git a/contrib/plugins/howvec.c b/contrib/plugins/howvec.c
index 4a5ec3d936..0ed01ea931 100644
--- a/contrib/plugins/howvec.c
+++ b/contrib/plugins/howvec.c
@@ -333,7 +333,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (i = 0; i < argc; i++) {
         char *p = argv[i];
-        g_autofree char **tokens = g_strsplit(p, "=", -1);
+        g_auto(GStrv) tokens = g_strsplit(p, "=", -1);
         if (g_strcmp0(tokens[0], "inline") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_inline)) {
                 fprintf(stderr, "boolean argument parsing failed: %s\n", p);
diff --git a/contrib/plugins/hwprofile.c b/contrib/plugins/hwprofile.c
index 691d4edb0c..739ac0c66b 100644
--- a/contrib/plugins/hwprofile.c
+++ b/contrib/plugins/hwprofile.c
@@ -263,7 +263,7 @@ int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
 
     for (i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
 
         if (g_strcmp0(tokens[0], "track") == 0) {
             if (g_strcmp0(tokens[1], "read") == 0) {
diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index a41ffe83fa..e36f0b9562 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -323,7 +323,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (i = 0; i < argc; i++) {
         char *p = argv[i];
-        g_autofree char **tokens = g_strsplit(p, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(p, "=", 2);
 
         if (g_strcmp0(tokens[0], "verbose") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &verbose)) {
diff --git a/tests/plugin/bb.c b/tests/plugin/bb.c
index 7d470a1011..df50d1fd3b 100644
--- a/tests/plugin/bb.c
+++ b/tests/plugin/bb.c
@@ -104,7 +104,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
         if (g_strcmp0(tokens[0], "inline") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_inline)) {
                 fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index cd5ea5d4ae..e251a84d86 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -196,7 +196,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 {
     for (int i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
         if (g_strcmp0(tokens[0], "inline") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_inline)) {
                 fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
diff --git a/tests/plugin/mem.c b/tests/plugin/mem.c
index 4570f7d815..f3b9f696a0 100644
--- a/tests/plugin/mem.c
+++ b/tests/plugin/mem.c
@@ -83,7 +83,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (int i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
 
         if (g_strcmp0(tokens[0], "haddr") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_haddr)) {
diff --git a/tests/plugin/syscall.c b/tests/plugin/syscall.c
index 96040c578f..72e1a5bf90 100644
--- a/tests/plugin/syscall.c
+++ b/tests/plugin/syscall.c
@@ -121,7 +121,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
 
     for (int i = 0; i < argc; i++) {
         char *opt = argv[i];
-        g_autofree char **tokens = g_strsplit(opt, "=", 2);
+        g_auto(GStrv) tokens = g_strsplit(opt, "=", 2);
 
         if (g_strcmp0(tokens[0], "print") == 0) {
             if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_print)) {
-- 
2.39.2



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

* [PATCH 20/26] plugins: update lockstep to use g_memdup2
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (18 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 19/26] plugins: fix memory leak while parsing options Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-26  8:25   ` Richard Henderson
  2023-06-23 12:20 ` [PATCH 21/26] docs/devel: add some front matter to the devel index Alex Bennée
                   ` (5 subsequent siblings)
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

The old g_memdup is deprecated, use the replacement.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/lockstep.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index e36f0b9562..3614c3564c 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -130,7 +130,7 @@ static void report_divergance(ExecState *us, ExecState *them)
         }
     }
     divergence_log = g_slist_prepend(divergence_log,
-                                     g_memdup(&divrec, sizeof(divrec)));
+                                     g_memdup2(&divrec, sizeof(divrec)));
 
     /* Output short log entry of going out of sync... */
     if (verbose || divrec.distance == 1 || diverged) {
-- 
2.39.2



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

* [PATCH 21/26] docs/devel: add some front matter to the devel index
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (19 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 20/26] plugins: update lockstep to use g_memdup2 Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 22/26] include/migration: mark vmstate_register() as a legacy function Alex Bennée
                   ` (4 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Give an overview of the most useful bits of the devel documentation to
read depending on what the developer wants to do.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-2-alex.bennee@linaro.org>

---
v2
  - removed excessive start
---
 docs/devel/index-process.rst |  2 ++
 docs/devel/index-tcg.rst     |  2 ++
 docs/devel/index.rst         | 24 ++++++++++++++++++++++--
 docs/devel/tcg.rst           |  2 ++
 4 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/docs/devel/index-process.rst b/docs/devel/index-process.rst
index d50dd74c3e..362f97ee30 100644
--- a/docs/devel/index-process.rst
+++ b/docs/devel/index-process.rst
@@ -1,3 +1,5 @@
+.. _development_process:
+
 QEMU Community Processes
 ------------------------
 
diff --git a/docs/devel/index-tcg.rst b/docs/devel/index-tcg.rst
index b44ff8b5a4..a992844e5c 100644
--- a/docs/devel/index-tcg.rst
+++ b/docs/devel/index-tcg.rst
@@ -1,3 +1,5 @@
+.. _tcg:
+
 TCG Emulation
 -------------
 
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
index 09cfb322be..abf60457c2 100644
--- a/docs/devel/index.rst
+++ b/docs/devel/index.rst
@@ -2,10 +2,30 @@
 Developer Information
 ---------------------
 
-This section of the manual documents various parts of the internals of QEMU.
-You only need to read it if you are interested in reading or
+This section of the manual documents various parts of the internals of
+QEMU. You only need to read it if you are interested in reading or
 modifying QEMU's source code.
 
+QEMU is a large and mature project with a number of complex subsystems
+that can be overwhelming to understand. The development documentation
+is not comprehensive but hopefully presents enough to get you started.
+If there are areas that are unclear please reach out either via the
+IRC channel or mailing list and hopefully we can improve the
+documentation for future developers.
+
+All developers will want to familiarise themselves with
+:ref:`development_process` and how the community interacts. Please pay
+particular attention to the :ref:`coding-style` and
+:ref:`submitting-a-patch` sections to avoid common pitfalls.
+
+If you wish to implement a new hardware model you will want to read
+through the :ref:`qom` documentation to understand how QEMU's object
+model works.
+
+Those wishing to enhance or add new CPU emulation capabilities will
+want to read our :ref:`tcg` documentation, especially the overview of
+the :ref:`tcg_internals`.
+
 .. toctree::
    :maxdepth: 1
 
diff --git a/docs/devel/tcg.rst b/docs/devel/tcg.rst
index b4096a17df..2786f2f679 100644
--- a/docs/devel/tcg.rst
+++ b/docs/devel/tcg.rst
@@ -1,3 +1,5 @@
+.. _tcg_internals:
+
 ====================
 Translator Internals
 ====================
-- 
2.39.2



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

* [PATCH 22/26] include/migration: mark vmstate_register() as a legacy function
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (20 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 21/26] docs/devel: add some front matter to the devel index Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 23/26] include/hw/qdev-core: fixup kerneldoc annotations Alex Bennée
                   ` (3 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Mention that QOM-ified devices already have support for registering
the description.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Acked-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-3-alex.bennee@linaro.org>
---
 include/migration/vmstate.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 084f5e784a..35579b2c1f 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -1209,7 +1209,14 @@ int vmstate_register_with_alias_id(VMStateIf *obj, uint32_t instance_id,
                                    int required_for_version,
                                    Error **errp);
 
-/* Returns: 0 on success, -1 on failure */
+/**
+ * vmstate_register() - legacy function to register state serialisation description
+ *
+ * New code shouldn't be using this function as QOM-ified devices have
+ * dc->vmsd to store the serialisation description.
+ *
+ * Returns: 0 on success, -1 on failure
+ */
 static inline int vmstate_register(VMStateIf *obj, int instance_id,
                                    const VMStateDescription *vmsd,
                                    void *opaque)
-- 
2.39.2



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

* [PATCH 23/26] include/hw/qdev-core: fixup kerneldoc annotations
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (21 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 22/26] include/migration: mark vmstate_register() as a legacy function Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 24/26] docs/devel/qom.rst: Correct code style Alex Bennée
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Fix up the kerneldoc markup and start documenting the various fields
in QDEV related structures. This involved:

 - moving overall description to a DOC: comment at top
 - fixing various markup issues for types and structures
 - adding missing Return: statements
 - adding some typedefs to hide QLIST macros in headers

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-4-alex.bennee@linaro.org>
---
 include/hw/qdev-core.h | 365 ++++++++++++++++++++++++++++-------------
 1 file changed, 252 insertions(+), 113 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index f1070d6dc7..ef2b48db84 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -10,6 +10,65 @@
 #include "hw/hotplug.h"
 #include "hw/resettable.h"
 
+/**
+ * DOC: The QEMU Device API
+ *
+ * All modern devices should represented as a derived QOM class of
+ * TYPE_DEVICE. The device API introduces the additional methods of
+ * @realize and @unrealize to represent additional stages in a device
+ * objects life cycle.
+ *
+ * Realization
+ * -----------
+ *
+ * Devices are constructed in two stages:
+ *
+ * 1) object instantiation via object_initialize() and
+ * 2) device realization via the #DeviceState.realized property
+ *
+ * The former may not fail (and must not abort or exit, since it is called
+ * during device introspection already), and the latter may return error
+ * information to the caller and must be re-entrant.
+ * Trivial field initializations should go into #TypeInfo.instance_init.
+ * Operations depending on @props static properties should go into @realize.
+ * After successful realization, setting static properties will fail.
+ *
+ * As an interim step, the #DeviceState.realized property can also be
+ * set with qdev_realize(). In the future, devices will propagate this
+ * state change to their children and along busses they expose. The
+ * point in time will be deferred to machine creation, so that values
+ * set in @realize will not be introspectable beforehand. Therefore
+ * devices must not create children during @realize; they should
+ * initialize them via object_initialize() in their own
+ * #TypeInfo.instance_init and forward the realization events
+ * appropriately.
+ *
+ * Any type may override the @realize and/or @unrealize callbacks but needs
+ * to call the parent type's implementation if keeping their functionality
+ * is desired. Refer to QOM documentation for further discussion and examples.
+ *
+ * .. note::
+ *   Since TYPE_DEVICE doesn't implement @realize and @unrealize, types
+ *   derived directly from it need not call their parent's @realize and
+ *   @unrealize. For other types consult the documentation and
+ *   implementation of the respective parent types.
+ *
+ * Hiding a device
+ * ---------------
+ *
+ * To hide a device, a DeviceListener function hide_device() needs to
+ * be registered. It can be used to defer adding a device and
+ * therefore hide it from the guest. The handler registering to this
+ * DeviceListener can save the QOpts passed to it for re-using it
+ * later. It must return if it wants the device to be hidden or
+ * visible. When the handler function decides the device shall be
+ * visible it will be added with qdev_device_add() and realized as any
+ * other device. Otherwise qdev_device_add() will return early without
+ * adding the device. The guest will not see a "hidden" device until
+ * it was marked visible and qdev_device_add called again.
+ *
+ */
+
 enum {
     DEV_NVECTORS_UNSPECIFIED = -1,
 };
@@ -38,7 +97,7 @@ typedef void (*BusRealize)(BusState *bus, Error **errp);
 typedef void (*BusUnrealize)(BusState *bus);
 
 /**
- * DeviceClass:
+ * struct DeviceClass - The base class for all devices.
  * @props: Properties accessing state fields.
  * @realize: Callback function invoked when the #DeviceState:realized
  * property is changed to %true.
@@ -47,72 +106,36 @@ typedef void (*BusUnrealize)(BusState *bus);
  * @hotpluggable: indicates if #DeviceClass is hotpluggable, available
  * as readonly "hotpluggable" property of #DeviceState instance
  *
- * # Realization #
- * Devices are constructed in two stages,
- * 1) object instantiation via object_initialize() and
- * 2) device realization via #DeviceState:realized property.
- * The former may not fail (and must not abort or exit, since it is called
- * during device introspection already), and the latter may return error
- * information to the caller and must be re-entrant.
- * Trivial field initializations should go into #TypeInfo.instance_init.
- * Operations depending on @props static properties should go into @realize.
- * After successful realization, setting static properties will fail.
- *
- * As an interim step, the #DeviceState:realized property can also be
- * set with qdev_realize().
- * In the future, devices will propagate this state change to their children
- * and along busses they expose.
- * The point in time will be deferred to machine creation, so that values
- * set in @realize will not be introspectable beforehand. Therefore devices
- * must not create children during @realize; they should initialize them via
- * object_initialize() in their own #TypeInfo.instance_init and forward the
- * realization events appropriately.
- *
- * Any type may override the @realize and/or @unrealize callbacks but needs
- * to call the parent type's implementation if keeping their functionality
- * is desired. Refer to QOM documentation for further discussion and examples.
- *
- * <note>
- *   <para>
- * Since TYPE_DEVICE doesn't implement @realize and @unrealize, types
- * derived directly from it need not call their parent's @realize and
- * @unrealize.
- * For other types consult the documentation and implementation of the
- * respective parent types.
- *   </para>
- * </note>
- *
- * # Hiding a device #
- * To hide a device, a DeviceListener function hide_device() needs to
- * be registered.
- * It can be used to defer adding a device and therefore hide it from
- * the guest. The handler registering to this DeviceListener can save
- * the QOpts passed to it for re-using it later. It must return if it
- * wants the device to be hidden or visible. When the handler function
- * decides the device shall be visible it will be added with
- * qdev_device_add() and realized as any other device. Otherwise
- * qdev_device_add() will return early without adding the device. The
- * guest will not see a "hidden" device until it was marked visible
- * and qdev_device_add called again.
- *
  */
 struct DeviceClass {
-    /*< private >*/
+    /* private: */
     ObjectClass parent_class;
-    /*< public >*/
+    /* public: */
 
+    /**
+     * @categories: device categories device belongs to
+     */
     DECLARE_BITMAP(categories, DEVICE_CATEGORY_MAX);
+    /**
+     * @fw_name: name used to identify device to firmware interfaces
+     */
     const char *fw_name;
+    /**
+     * @desc: human readable description of device
+     */
     const char *desc;
 
-    /*
-     * The underscore at the end ensures a compile-time error if someone
-     * assigns to dc->props instead of using device_class_set_props.
+    /**
+     * @props_: properties associated with device, should only be
+     * assigned by using device_class_set_props(). The underscore
+     * ensures a compile-time error if someone attempts to assign
+     * dc->props directly.
      */
     Property *props_;
 
-    /*
-     * Can this device be instantiated with -device / device_add?
+    /**
+     * @user_creatable: Can user instantiate with -device / device_add?
+     *
      * All devices should support instantiation with device_add, and
      * this flag should not exist.  But we're not there, yet.  Some
      * devices fail to instantiate with cryptic error messages.
@@ -120,25 +143,35 @@ struct DeviceClass {
      * behavior would be cruel; clearing this flag will protect them.
      * It should never be cleared without a comment explaining why it
      * is cleared.
+     *
      * TODO remove once we're there
      */
     bool user_creatable;
     bool hotpluggable;
 
     /* callbacks */
-    /*
-     * Reset method here is deprecated and replaced by methods in the
-     * resettable class interface to implement a multi-phase reset.
+    /**
+     * @reset: deprecated device reset method pointer
+     *
+     * Modern code should use the ResettableClass interface to
+     * implement a multi-phase reset.
+     *
      * TODO: remove once every reset callback is unused
      */
     DeviceReset reset;
     DeviceRealize realize;
     DeviceUnrealize unrealize;
 
-    /* device state */
+    /**
+     * @vmsd: device state serialisation description for
+     * migration/save/restore
+     */
     const VMStateDescription *vmsd;
 
-    /* Private to qdev / bus.  */
+    /**
+     * @bus_type: bus type
+     * private: to qdev / bus.
+     */
     const char *bus_type;
 };
 
@@ -167,37 +200,96 @@ typedef struct {
     bool engaged_in_io;
 } MemReentrancyGuard;
 
+
+typedef QLIST_HEAD(, NamedGPIOList) NamedGPIOListHead;
+typedef QLIST_HEAD(, NamedClockList) NamedClockListHead;
+typedef QLIST_HEAD(, BusState) BusStateHead;
+
 /**
- * DeviceState:
- * @reset: ResettableState for the device; handled by Resettable interface.
+ * struct DeviceState - common device state, accessed with qdev helpers
  *
  * This structure should not be accessed directly.  We declare it here
  * so that it can be embedded in individual device state structures.
  */
 struct DeviceState {
-    /*< private >*/
+    /* private: */
     Object parent_obj;
-    /*< public >*/
+    /* public: */
 
+    /**
+     * @id: global device id
+     */
     char *id;
+    /**
+     * @canonical_path: canonical path of realized device in the QOM tree
+     */
     char *canonical_path;
+    /**
+     * @realized: has device been realized?
+     */
     bool realized;
+    /**
+     * @pending_deleted_event: track pending deletion events during unplug
+     */
     bool pending_deleted_event;
+    /**
+     * @pending_deleted_expires_ms: optional timeout for deletion events
+     */
     int64_t pending_deleted_expires_ms;
+    /**
+     * @opts: QDict of options for the device
+     */
     QDict *opts;
+    /**
+     * @hotplugged: was device added after PHASE_MACHINE_READY?
+     */
     int hotplugged;
+    /**
+     * @allow_unplug_during_migration: can device be unplugged during migration
+     */
     bool allow_unplug_during_migration;
+    /**
+     * @parent_bus: bus this device belongs to
+     */
     BusState *parent_bus;
-    QLIST_HEAD(, NamedGPIOList) gpios;
-    QLIST_HEAD(, NamedClockList) clocks;
-    QLIST_HEAD(, BusState) child_bus;
+    /**
+     * @gpios: QLIST of named GPIOs the device provides.
+     */
+    NamedGPIOListHead gpios;
+    /**
+     * @clocks: QLIST of named clocks the device provides.
+     */
+    NamedClockListHead clocks;
+    /**
+     * @child_bus: QLIST of child buses
+     */
+    BusStateHead child_bus;
+    /**
+     * @num_child_bus: number of @child_bus entries
+     */
     int num_child_bus;
+    /**
+     * @instance_id_alias: device alias for handling legacy migration setups
+     */
     int instance_id_alias;
+    /**
+     * @alias_required_for_version: indicates @instance_id_alias is
+     * needed for migration
+     */
     int alias_required_for_version;
+    /**
+     * @reset: ResettableState for the device; handled by Resettable interface.
+     */
     ResettableState reset;
+    /**
+     * @unplug_blockers: list of reasons to block unplugging of device
+     */
     GSList *unplug_blockers;
-
-    /* Is the device currently in mmio/pio/dma? Used to prevent re-entrancy */
+    /**
+     * @mem_reentrancy_guard: Is the device currently in mmio/pio/dma?
+     *
+     * Used to prevent re-entrancy confusing things.
+     */
     MemReentrancyGuard mem_reentrancy_guard;
 };
 
@@ -264,13 +356,24 @@ typedef struct BusChild {
 
 #define QDEV_HOTPLUG_HANDLER_PROPERTY "hotplug-handler"
 
+typedef QTAILQ_HEAD(, BusChild) BusChildHead;
+typedef QLIST_ENTRY(BusState) BusStateEntry;
+
 /**
- * BusState:
+ * struct BusState:
+ * @obj: parent object
+ * @parent: parent Device
+ * @name: name of bus
  * @hotplug_handler: link to a hotplug handler associated with bus.
- * @reset: ResettableState for the bus; handled by Resettable interface.
+ * @max_index: max number of child buses
+ * @realized: is the bus itself realized?
+ * @full: is the bus full?
+ * @num_children: current number of child buses
  */
 struct BusState {
+    /* private: */
     Object obj;
+    /* public: */
     DeviceState *parent;
     char *name;
     HotplugHandler *hotplug_handler;
@@ -279,18 +382,24 @@ struct BusState {
     bool full;
     int num_children;
 
-    /*
-     * children is a RCU QTAILQ, thus readers must use RCU to access it,
+    /**
+     * @children: an RCU protected QTAILQ, thus readers must use RCU to access it,
      * and writers must hold the big qemu lock
      */
-
-    QTAILQ_HEAD(, BusChild) children;
-    QLIST_ENTRY(BusState) sibling;
+    BusChildHead children;
+    /**
+     * @sibling: next bus
+     */
+    BusStateEntry sibling;
+    /**
+     * @reset: ResettableState for the bus; handled by Resettable interface.
+     */
     ResettableState reset;
 };
 
 /**
- * GlobalProperty:
+ * typedef GlobalProperty - a global property type
+ *
  * @used: Set to true if property was used when initializing a device.
  * @optional: If set to true, GlobalProperty will be skipped without errors
  *            if the property doesn't exist.
@@ -324,7 +433,8 @@ compat_props_add(GPtrArray *arr,
  * This only allocates the memory and initializes the device state
  * structure, ready for the caller to set properties if they wish.
  * The device still needs to be realized.
- * The returned object has a reference count of 1.
+ *
+ * Return: a derived DeviceState object with a reference count of 1.
  */
 DeviceState *qdev_new(const char *name);
 
@@ -334,16 +444,18 @@ DeviceState *qdev_new(const char *name);
  *
  * This is like qdev_new(), except it returns %NULL when type @name
  * does not exist, rather than asserting.
+ *
+ * Return: a derived DeviceState object with a reference count of 1 or
+ * NULL if type @name does not exist.
  */
 DeviceState *qdev_try_new(const char *name);
 
 /**
- * qdev_is_realized:
+ * qdev_is_realized() - check if device is realized
  * @dev: The device to check.
  *
- * May be called outside big qemu lock.
- *
- * Returns: %true% if the device has been fully constructed, %false% otherwise.
+ * Context: May be called outside big qemu lock.
+ * Return: true if the device has been fully constructed, false otherwise.
  */
 static inline bool qdev_is_realized(DeviceState *dev)
 {
@@ -361,11 +473,11 @@ static inline bool qdev_is_realized(DeviceState *dev)
  * @dev must not be plugged into a bus already.
  * If @bus, plug @dev into @bus.  This takes a reference to @dev.
  * If @dev has no QOM parent, make one up, taking another reference.
- * On success, return true.
- * On failure, store an error through @errp and return false.
  *
  * If you created @dev using qdev_new(), you probably want to use
  * qdev_realize_and_unref() instead.
+ *
+ * Return: true on success, else false setting @errp with error
  */
 bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp);
 
@@ -392,6 +504,8 @@ bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp);
  * for the only reference to the child device to be held by the parent
  * via the child<> property, and so the reference-count-drop done here
  * would be incorrect. For that use case you want qdev_realize().
+ *
+ * Return: true on success, else false setting @errp with error
  */
 bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp);
 
@@ -420,16 +534,16 @@ void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
 HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev);
 HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev);
 bool qdev_hotplug_allowed(DeviceState *dev, Error **errp);
+
 /**
- * qdev_get_hotplug_handler: Get handler responsible for device wiring
- *
- * Find HOTPLUG_HANDLER for @dev that provides [pre|un]plug callbacks for it.
+ * qdev_get_hotplug_handler() - Get handler responsible for device wiring
+ * @dev: the device we want the HOTPLUG_HANDLER for.
  *
  * Note: in case @dev has a parent bus, it will be returned as handler unless
  * machine handler overrides it.
  *
- * Returns: pointer to object that implements TYPE_HOTPLUG_HANDLER interface
- *          or NULL if there aren't any.
+ * Return: pointer to object that implements TYPE_HOTPLUG_HANDLER interface
+ * or NULL if there aren't any.
  */
 HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev);
 void qdev_unplug(DeviceState *dev, Error **errp);
@@ -459,15 +573,15 @@ void qdev_del_unplug_blocker(DeviceState *dev, Error *reason);
  * qdev_unplug_blocked: Confirm if a device is blocked from unplug
  *
  * @dev: Device to be tested
- * @reason: Returns one of the reasons why the device is blocked,
- *          if any
+ * @errp: The reasons why the device is blocked, if any
  *
- * Returns: true if device is blocked from unplug, false otherwise
+ * Returns: true (also setting @errp) if device is blocked from unplug,
+ * false otherwise
  */
 bool qdev_unplug_blocked(DeviceState *dev, Error **errp);
 
 /**
- * GpioPolarity: Polarity of a GPIO line
+ * typedef GpioPolarity - Polarity of a GPIO line
  *
  * GPIO lines use either positive (active-high) logic,
  * or negative (active-low) logic.
@@ -499,6 +613,8 @@ typedef enum {
  * connect another device's output GPIO line to this input.
  *
  * For named input GPIO lines, use qdev_get_gpio_in_named().
+ *
+ * Return: qemu_irq corresponding to anonymous input GPIO line
  */
 qemu_irq qdev_get_gpio_in(DeviceState *dev, int n);
 
@@ -516,6 +632,8 @@ qemu_irq qdev_get_gpio_in(DeviceState *dev, int n);
  * array); this function will assert() if passed an invalid name or index.
  *
  * For anonymous input GPIO lines, use qdev_get_gpio_in().
+ *
+ * Return: qemu_irq corresponding to named input GPIO line
  */
 qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n);
 
@@ -523,7 +641,7 @@ qemu_irq qdev_get_gpio_in_named(DeviceState *dev, const char *name, int n);
  * qdev_connect_gpio_out: Connect one of a device's anonymous output GPIO lines
  * @dev: Device whose GPIO to connect
  * @n: Number of the anonymous output GPIO line (which must be in range)
- * @input_pin: qemu_irq to connect the output line to
+ * @pin: qemu_irq to connect the output line to
  *
  * This function connects an anonymous output GPIO line on a device
  * up to an arbitrary qemu_irq, so that when the device asserts that
@@ -594,6 +712,8 @@ void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n,
  *
  * You probably don't need to use this function -- it is used only
  * by the platform-bus subsystem.
+ *
+ * Return: qemu_irq associated with GPIO or NULL if un-wired.
  */
 qemu_irq qdev_get_gpio_out_connector(DeviceState *dev, const char *name, int n);
 
@@ -604,14 +724,17 @@ qemu_irq qdev_get_gpio_out_connector(DeviceState *dev, const char *name, int n);
  * @name: Name of the output GPIO array
  * @n: Number of the GPIO line in the array
  *
- * This function is provided only for use by the qtest testing framework
- * and is not suitable for use in non-testing parts of QEMU.
+ * .. note::
+ *   This function is provided only for use by the qtest testing framework
+ *   and is not suitable for use in non-testing parts of QEMU.
  *
  * This function breaks an existing connection of an outbound GPIO
  * line from @dev, and replaces it with the new qemu_irq @icpt, as if
  * ``qdev_connect_gpio_out_named(dev, icpt, name, n)`` had been called.
  * The previously connected qemu_irq is returned, so it can be restored
  * by a second call to qdev_intercept_gpio_out() if desired.
+ *
+ * Return: old disconnected qemu_irq if one existed
  */
 qemu_irq qdev_intercept_gpio_out(DeviceState *dev, qemu_irq icpt,
                                  const char *name, int n);
@@ -683,9 +806,7 @@ void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
                               const char *name, int n);
 
 /**
- * qdev_init_gpio_in_named_with_opaque: create an array of input GPIO lines
- *   for the specified device
- *
+ * qdev_init_gpio_in_named_with_opaque() - create an array of input GPIO lines
  * @dev: Device to create input GPIOs for
  * @handler: Function to call when GPIO line value is set
  * @opaque: Opaque data pointer to pass to @handler
@@ -698,8 +819,11 @@ void qdev_init_gpio_in_named_with_opaque(DeviceState *dev,
                                          const char *name, int n);
 
 /**
- * qdev_init_gpio_in_named: create an array of input GPIO lines
- *   for the specified device
+ * qdev_init_gpio_in_named() - create an array of input GPIO lines
+ * @dev: device to add array to
+ * @handler: a &typedef qemu_irq_handler function to call when GPIO is set
+ * @name: Name of the GPIO input (must be unique for this device)
+ * @n: Number of GPIO lines in this input set
  *
  * Like qdev_init_gpio_in_named_with_opaque(), but the opaque pointer
  * passed to the handler is @dev (which is the most commonly desired behaviour).
@@ -762,14 +886,17 @@ int qdev_walk_children(DeviceState *dev,
                        void *opaque);
 
 /**
- * device_cold_reset:
+ * device_cold_reset() - perform a recursive cold reset on a device
+ * @dev: device to reset.
+ *
  * Reset device @dev and perform a recursive processing using the resettable
  * interface. It triggers a RESET_TYPE_COLD.
  */
 void device_cold_reset(DeviceState *dev);
 
 /**
- * bus_cold_reset:
+ * bus_cold_reset() - perform a recursive cold reset on a bus
+ * @bus: bus to reset
  *
  * Reset bus @bus and perform a recursive processing using the resettable
  * interface. It triggers a RESET_TYPE_COLD.
@@ -777,14 +904,18 @@ void device_cold_reset(DeviceState *dev);
 void bus_cold_reset(BusState *bus);
 
 /**
- * device_is_in_reset:
- * Return true if the device @dev is currently being reset.
+ * device_is_in_reset() - check device reset state
+ * @dev: device to check
+ *
+ * Return: true if the device @dev is currently being reset.
  */
 bool device_is_in_reset(DeviceState *dev);
 
 /**
- * bus_is_in_reset:
- * Return true if the bus @bus is currently being reset.
+ * bus_is_in_reset() - check bus reset state
+ * @bus: bus to check
+ *
+ * Return: true if the bus @bus is currently being reset.
  */
 bool bus_is_in_reset(BusState *bus);
 
@@ -797,7 +928,14 @@ char *qdev_get_own_fw_dev_path_from_handler(BusState *bus, DeviceState *dev);
 void device_class_set_props(DeviceClass *dc, Property *props);
 
 /**
- * device_class_set_parent_reset:
+ * device_class_set_parent_reset() - legacy set device reset handlers
+ * @dc: device class
+ * @dev_reset: function pointer to reset handler
+ * @parent_reset: function pointer to parents reset handler
+ *
+ * Modern code should use the ResettableClass interface to
+ * implement a multi-phase reset instead.
+ *
  * TODO: remove the function when DeviceClass's reset method
  * is not used anymore.
  */
@@ -871,14 +1009,15 @@ void device_listener_register(DeviceListener *listener);
 void device_listener_unregister(DeviceListener *listener);
 
 /**
- * @qdev_should_hide_device:
+ * qdev_should_hide_device() - check if device should be hidden
+ *
  * @opts: options QDict
  * @from_json: true if @opts entries are typed, false for all strings
  * @errp: pointer to error object
  *
- * Check if a device should be added.
- * When a device is added via qdev_device_add() this will be called,
- * and return if the device should be added now or not.
+ * When a device is added via qdev_device_add() this will be called.
+ *
+ * Return: if the device should be added now or not.
  */
 bool qdev_should_hide_device(const QDict *opts, bool from_json, Error **errp);
 
-- 
2.39.2



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

* [PATCH 24/26] docs/devel/qom.rst: Correct code style
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (22 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 23/26] include/hw/qdev-core: fixup kerneldoc annotations Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:20 ` [PATCH 25/26] docs/devel: split qom-api reference into new file Alex Bennée
  2023-06-23 12:21 ` [PATCH 26/26] docs/devel: introduce some key concepts for QOM development Alex Bennée
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée, BALATON Zoltan

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

Per commit 067109a11c ("docs/devel: mention the spacing requirement
for QOM"):

  For a storage structure the first declaration should always be
  called “parent_obj” and for a class structure the first member
  should always be called “parent_class”

Adapt the QOM rST document accordingly.

Reported-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20230622101717.70468-1-philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 docs/devel/qom.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index c9237950d0..2828843058 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -26,7 +26,7 @@ features:
    typedef DeviceClass MyDeviceClass;
    typedef struct MyDevice
    {
-       DeviceState parent;
+       DeviceState parent_obj;
 
        int reg0, reg1, reg2;
    } MyDevice;
@@ -147,7 +147,7 @@ will also have a wrapper function to call it easily:
 
    typedef struct MyDeviceClass
    {
-       DeviceClass parent;
+       DeviceClass parent_class;
 
        void (*frobnicate) (MyDevice *obj);
    } MyDeviceClass;
-- 
2.39.2



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

* [PATCH 25/26] docs/devel: split qom-api reference into new file
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (23 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 24/26] docs/devel/qom.rst: Correct code style Alex Bennée
@ 2023-06-23 12:20 ` Alex Bennée
  2023-06-23 12:21 ` [PATCH 26/26] docs/devel: introduce some key concepts for QOM development Alex Bennée
  25 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:20 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Lets try and keep the overview of the sub-system digestible by
splitting the core API stuff into a separate file. As QOM and QDEV
work together we should also try and enumerate the qdev_ functions.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-5-alex.bennee@linaro.org>

---
v2
  - also include qdev API
---
 docs/devel/index-api.rst | 2 ++
 docs/devel/qdev-api.rst  | 7 +++++++
 docs/devel/qom-api.rst   | 9 +++++++++
 docs/devel/qom.rst       | 3 ++-
 4 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 docs/devel/qdev-api.rst
 create mode 100644 docs/devel/qom-api.rst

diff --git a/docs/devel/index-api.rst b/docs/devel/index-api.rst
index 7108821746..539ad29c21 100644
--- a/docs/devel/index-api.rst
+++ b/docs/devel/index-api.rst
@@ -11,5 +11,7 @@ generated from in-code annotations to function prototypes.
    loads-stores
    memory
    modules
+   qom-api
+   qdev-api
    ui
    zoned-storage
diff --git a/docs/devel/qdev-api.rst b/docs/devel/qdev-api.rst
new file mode 100644
index 0000000000..3f35eea025
--- /dev/null
+++ b/docs/devel/qdev-api.rst
@@ -0,0 +1,7 @@
+.. _qdev-api:
+
+================================
+QEMU Device (qdev) API Reference
+================================
+
+.. kernel-doc:: include/hw/qdev-core.h
diff --git a/docs/devel/qom-api.rst b/docs/devel/qom-api.rst
new file mode 100644
index 0000000000..ed1f17e797
--- /dev/null
+++ b/docs/devel/qom-api.rst
@@ -0,0 +1,9 @@
+.. _qom-api:
+
+=====================================
+QEMU Object Model (QOM) API Reference
+=====================================
+
+This is the complete API documentation for :ref:`qom`.
+
+.. kernel-doc:: include/qom/object.h
diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index 2828843058..c342ce18e3 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -387,4 +387,5 @@ OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
 API Reference
 -------------
 
-.. kernel-doc:: include/qom/object.h
+See the :ref:`QOM API<qom-api>` and :ref:`QDEV API<qdev-api>`
+documents for the complete API description.
-- 
2.39.2



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

* [PATCH 26/26] docs/devel: introduce some key concepts for QOM development
  2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
                   ` (24 preceding siblings ...)
  2023-06-23 12:20 ` [PATCH 25/26] docs/devel: split qom-api reference into new file Alex Bennée
@ 2023-06-23 12:21 ` Alex Bennée
  2023-06-26 13:27   ` Paolo Bonzini
  25 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-23 12:21 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang, Alex Bennée

Using QOM correctly is increasingly important to maintaining a modern
code base. However the current documentation skips some important
concepts before launching into a simple example. Lets:

  - at least mention properties
  - mention TYPE_OBJECT and TYPE_DEVICE
  - talk about why we have realize/unrealize
  - mention the QOM tree

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-6-alex.bennee@linaro.org>
---
 docs/devel/qom.rst | 47 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index c342ce18e3..0113afb6e6 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -13,6 +13,53 @@ features:
 - System for dynamically registering types
 - Support for single-inheritance of types
 - Multiple inheritance of stateless interfaces
+- Mapping internal members to publicly exposed properties
+
+The root object class is TYPE_OBJECT which provides for the basic
+object methods.
+
+The Device Class
+================
+
+The TYPE_DEVICE class is the parent class for all modern devices
+implemented in QEMU and adds some specific methods to handle QEMU
+device model. This includes managing the lifetime of devices from
+creation through to when they become visible to the guest and
+eventually unrealized.
+
+Device Life-cycle
+-----------------
+
+As class initialisation cannot fail devices have an two additional
+methods to handle the creation of dynamic devices. The ``realize``
+function is called with ``Error **`` pointer which should be set if
+the device cannot complete its setup. Otherwise on successful
+completion of the ``realize`` method the device object is added to the
+QOM tree and made visible to the guest.
+
+The reverse function is ``unrealize`` and should be were clean-up
+code lives to tidy up after the system is done with the device.
+
+All devices can be instantiated by C code, however only some can
+created dynamically via the command line or monitor. Likewise only
+some can be unplugged after creation and need an explicit
+``unrealize`` implementation. This is determined by the
+``user_creatable`` and ``hotpluggable`` variables in the root
+``DeviceClass`` structure.
+
+The QOM tree
+------------
+
+The QOM tree is a composition tree which represents all of the objects
+that make up a QEMU "machine". You can view this tree by running
+``info qom-tree`` in the :ref:`QEMU monitor`. It will contain both
+objects created by the machine itself as well those created due to
+user configuration.
+
+Creating a minimal device
+=========================
+
+A simple minimal device implementation may look something like bellow:
 
 .. code-block:: c
    :caption: Creating a minimal type
-- 
2.39.2



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

* Re: [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap
  2023-06-23 12:20 ` [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap Alex Bennée
@ 2023-06-23 12:23   ` Peter Maydell
  0 siblings, 0 replies; 47+ messages in thread
From: Peter Maydell @ 2023-06-23 12:23 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Richard Henderson, Juan Quintela, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang

On Fri, 23 Jun 2023 at 13:21, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> The very old compatibility alias of "ar" has been removed from more
> modern versions of keymap. Lets move with the times.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  pc-bios/keymaps/meson.build | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

There are already two versions of this patch on the mailing
list, both of which have better commit messages than
this one :-) The first one is:
https://patchew.org/QEMU/20230620162024.1132013-1-peter.maydell@linaro.org/

-- PMM


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

* Re: [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index
  2023-06-23 12:20 ` [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index Alex Bennée
@ 2023-06-23 12:25   ` Peter Maydell
  2023-06-26 20:21     ` Alex Bennée
  0 siblings, 1 reply; 47+ messages in thread
From: Peter Maydell @ 2023-06-23 12:25 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Richard Henderson, Juan Quintela, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang

On Fri, 23 Jun 2023 at 13:21, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> We can return XKB_MOD_INVALID which rightly gets flagged by sanitisers
> as an overly wide shift attempt.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Same comments as on the first version of this patch:
looks OK code-wise, but have you eyeballed the output?
Does the keyboard layout that triggers this have no
AltGr at all, or does it call it by a different name?

thanks
-- PMM


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

* Re: [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS
  2023-06-23 12:20 ` [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS Alex Bennée
@ 2023-06-23 15:10   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 47+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-06-23 15:10 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang

On 23/6/23 14:20, Alex Bennée wrote:
> This is yet another make target you usually run in the top level of
> the source directory.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   Makefile | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

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




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

* Re: [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max
  2023-06-23 12:20 ` [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max Alex Bennée
@ 2023-06-23 15:14   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 47+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-06-23 15:14 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang

On 23/6/23 14:20, Alex Bennée wrote:
> From: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
> 
> Update prebuilt firmware images to have TF-A with FEAT_FGT support
> enabled. This allowed us to enable test for "max" cpu in sbsa-ref
> machine.
> 
> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
> Message-Id: <20230530152240.79160-1-marcin.juszkiewicz@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/avocado/machine_aarch64_sbsaref.py | 22 +++++++++++-----------
>   1 file changed, 11 insertions(+), 11 deletions(-)


> @@ -150,7 +150,7 @@ def test_sbsaref_alpine_linux_neoverse_n1(self):
>           """
>           self.boot_alpine_linux("neoverse-n1")
>   
> -    @skip("requires TF-A update to handle FEAT_FGT")
> +    @skipUnless(os.getenv("AVOCADO_TIMEOUT_EXPECTED"), "Test might timeout")

Same comment as v1, we can remove the @skip* tags.

Similarly to v1:
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>

v1: 
https://lore.kernel.org/qemu-devel/579fb938-dc8a-5f85-143f-644ba1f1db40@linaro.org/


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

* Re: [PATCH 01/26] gitlab: explicit set artifacts publishing criteria
  2023-06-23 12:20 ` [PATCH 01/26] gitlab: explicit set artifacts publishing criteria Alex Bennée
@ 2023-06-26  7:58   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  7:58 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Juan Quintela, Peter Maydell, Cleber Rosa, Darren Kenny,
	Alexandre Iooss, Peter Xu, qemu-arm, Eduardo Habkost, Riku Voipio,
	Mahmoud Mandour, Daniel P. Berrangé, Paolo Bonzini,
	Bandan Das, Marcin Juszkiewicz, Radoslaw Biernacki,
	Alexander Bulekov, Leif Lindholm, Qiuhao Li,
	Wainer dos Santos Moschetta, Marcel Apfelbaum, Leonardo Bras,
	Philippe Mathieu-Daudé, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang

On 6/23/23 14:20, Alex Bennée wrote:
> From: Daniel P. Berrangé <berrange@redhat.com>
> 
> If not set explicitly, gitlab assumes 'when: on_success" as the
> publishing criteria for artifacts. This is reasonable if the
> artifact is an output deliverable of the job. This is useless
> if the artifact is a log file to be used for debugging job
> failures.
> 
> This change makes the desired criteria explicit for every job
> that publishes artifacts.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> Message-Id: <20230503145535.91325-2-berrange@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 02/26] gitlab: ensure coverage job also publishes meson log
  2023-06-23 12:20 ` [PATCH 02/26] gitlab: ensure coverage job also publishes meson log Alex Bennée
@ 2023-06-26  7:59   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  7:59 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> From: Daniel P. Berrangé <berrange@redhat.com>
> 
> The coverage job wants to publish a coverage report on success, but the
> tests might fail and in that case we need the meson logs for debugging.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> Message-Id: <20230503145535.91325-3-berrange@redhat.com>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   .gitlab-ci.d/buildtest.yml | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 03/26] gitlab: reduce testing scope of check-gcov
  2023-06-23 12:20 ` [PATCH 03/26] gitlab: reduce testing scope of check-gcov Alex Bennée
@ 2023-06-26  7:59   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  7:59 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> This keeps timing out on gitlab due to some qtests taking a long time.
> As this is just ensuring the gcov machinery is working and not
> attempting to be comprehensive lets skip qtest in this run.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   .gitlab-ci.d/buildtest.yml | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap
  2023-06-23 12:20 ` [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap Alex Bennée
@ 2023-06-26  8:02   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:02 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> When updating to the latest fedora the santizer found more leaks
> inside xkbmap:
> 
>    FAILED: pc-bios/keymaps/ar
>    /builds/stsquad/qemu/build-oss-fuzz/qemu-keymap -f pc-bios/keymaps/ar -l ara
>    =================================================================
>    ==3604==ERROR: LeakSanitizer: detected memory leaks
>    Direct leak of 1424 byte(s) in 1 object(s) allocated from:
>        #0 0x56316418ebec in __interceptor_calloc (/builds/stsquad/qemu/build-oss-fuzz/qemu-keymap+0x127bec) (BuildId: a2ad9da3190962acaa010fa8f44a9269f9081e1c)
>        #1 0x7f60d4dc067e  (/lib64/libxkbcommon.so.0+0x1c67e) (BuildId: b243a34e4e58e6a30b93771c256268b114d34b80)
>        #2 0x7f60d4dc2137 in xkb_keymap_new_from_names (/lib64/libxkbcommon.so.0+0x1e137) (BuildId: b243a34e4e58e6a30b93771c256268b114d34b80)
>        #3 0x5631641ca50f in main /builds/stsquad/qemu/build-oss-fuzz/../qemu-keymap.c:215:11
> 
> and many more. As we can't do anything about the library add a
> suppression to keep the CI going with what its meant to be doing.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   scripts/oss-fuzz/lsan_suppressions.txt | 3 +++
>   1 file changed, 3 insertions(+)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz
  2023-06-23 12:20 ` [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz Alex Bennée
@ 2023-06-26  8:06   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:06 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> An update to the clang tooling detects more issues with the code
> including a memory leak from the g_string_new() allocation. Clean up
> the code with g_autoptr and use ARRAY_SIZE while we are at it.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/qtest/fuzz/generic_fuzz.c | 11 ++++-------
>   1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c
> index c525d22951..a4841181cc 100644
> --- a/tests/qtest/fuzz/generic_fuzz.c
> +++ b/tests/qtest/fuzz/generic_fuzz.c
> @@ -954,17 +954,14 @@ static void register_generic_fuzz_targets(void)
>               .crossover = generic_fuzz_crossover
>       });
>   
> -    GString *name;
> +    g_autoptr(GString) name = g_string_new("");
>       const generic_fuzz_config *config;
>   
> -    for (int i = 0;
> -         i < sizeof(predefined_configs) / sizeof(generic_fuzz_config);
> -         i++) {
> +    for (int i = 0; i < ARRAY_SIZE(predefined_configs); i++) {
>           config = predefined_configs + i;
> -        name = g_string_new("generic-fuzz");
> -        g_string_append_printf(name, "-%s", config->name);
> +        g_string_printf(name, "generic-fuzz-%s", config->name);
>           fuzz_add_target(&(FuzzTarget){
> -                .name = name->str,
> +                .name = g_strdup(name->str),
>                   .description = "Predefined generic-fuzz config.",
>                   .get_init_cmdline = generic_fuzz_predefined_config_cmdline,
>                   .pre_fuzz = generic_pre_fuzz,

This is

   .name = g_strconcat("generic-fuzz-", config->name, NULL),

without the extra GString or printf stuff.


r~


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

* Re: [PATCH 12/26] tests/lcitool: update to latest version
  2023-06-23 12:20 ` [PATCH 12/26] tests/lcitool: update to latest version Alex Bennée
@ 2023-06-26  8:08   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:08 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> We need this for the riscv64 and gcc-native mappings. As the older
> alpine release has been dropped from the mappings we also need to bump
> the version of alpine we use.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/docker/dockerfiles/alpine.docker | 4 ++--
>   tests/lcitool/libvirt-ci               | 2 +-
>   tests/lcitool/refresh                  | 2 +-
>   3 files changed, 4 insertions(+), 4 deletions(-)

Acked-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 13/26] tests/lcitool: Bump fedora container versions
  2023-06-23 12:20 ` [PATCH 13/26] tests/lcitool: Bump fedora container versions Alex Bennée
@ 2023-06-26  8:09   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:09 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> From: Erik Skultety <eskultet@redhat.com>
> 
> Fedora 37 -> 38
> 
> Signed-off-by: Erik Skultety <eskultet@redhat.com>
> Message-Id: <c9b00e573a7a80fc6ce5c68595382f5c916a9195.1685528076.git.eskultet@redhat.com>
> [AJB: Dropped alpine (in prev commit), reflow commit msg]
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/docker/dockerfiles/fedora-win32-cross.docker | 4 ++--
>   tests/docker/dockerfiles/fedora-win64-cross.docker | 4 ++--
>   tests/docker/dockerfiles/fedora.docker             | 4 ++--
>   tests/lcitool/refresh                              | 6 +++---
>   4 files changed, 9 insertions(+), 9 deletions(-)

Acked-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 14/26] tests/lcitool: add an explicit gcc-native package
  2023-06-23 12:20 ` [PATCH 14/26] tests/lcitool: add an explicit gcc-native package Alex Bennée
@ 2023-06-26  8:10   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:10 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> We need a native compiler to build the hexagon codegen tools. In our
> current images we already have a gcc as a side effect of a broken
> dependency between gcovr and lcov but this will be fixed when we move
> to bookworm. See
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=987818 for details.
> 
> Update the packages while we are at it.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Acked-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 15/26] tests/lcitool: introduce qemu-minimal
  2023-06-23 12:20 ` [PATCH 15/26] tests/lcitool: introduce qemu-minimal Alex Bennée
@ 2023-06-26  8:14   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:14 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> This is a very bare bones set of dependencies for a minimal build of
> QEMU. This will be useful for bootstrapping cross compile images based
> on things like Debian Sid where stuff isn't always in sync.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   tests/lcitool/projects/qemu-minimal.yml | 23 +++++++++++++++++++++++
>   1 file changed, 23 insertions(+)
>   create mode 100644 tests/lcitool/projects/qemu-minimal.yml
> 
> diff --git a/tests/lcitool/projects/qemu-minimal.yml b/tests/lcitool/projects/qemu-minimal.yml
> new file mode 100644
> index 0000000000..507f1f6881
> --- /dev/null
> +++ b/tests/lcitool/projects/qemu-minimal.yml
> @@ -0,0 +1,23 @@
> +# Very minimal set of qemu packages, used for early bootstrap

"early bootstrap" doesn't seem like the right phrase.

At least it reminds me of gcc building itself once, so that you can then do it again with 
the full environment.  But we aren't going to do that.  We just want to sanity check that 
some host-specific bits don't contain typos or get bitrotten.

Perhaps "used for minimal cross-compile sanity checks"?


r~


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

* Re: [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool
  2023-06-23 12:20 ` [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool Alex Bennée
@ 2023-06-26  8:16   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:16 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:

> --- a/tests/lcitool/projects/qemu-minimal.yml
> +++ b/tests/lcitool/projects/qemu-minimal.yml
> @@ -4,6 +4,8 @@ packages:
>    - bash
>    - bc
>    - bison
> + - ccache
> + - findutils
>    - flex
>    - g++
>    - gcc
> @@ -21,3 +23,5 @@ packages:
>    - pkg-config
>    - python3
>    - python3-venv
> + - sed
> + - tar

Squash this with previous, or just merge the two patches.


r~


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

* Re: [PATCH 19/26] plugins: fix memory leak while parsing options
  2023-06-23 12:20 ` [PATCH 19/26] plugins: fix memory leak while parsing options Alex Bennée
@ 2023-06-26  8:24   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:24 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> It was hard to track down this leak as it was an internal allocation
> by glib and the backtraces did not give much away. The autofree was
> freeing the allocation with g_free() but not taking care of the
> individual strings. They should have been freed with g_strfreev()
> instead.
> 
> Searching the glib source code for the correct string free function
> led to:
> 
>    G_DEFINE_AUTO_CLEANUP_FREE_FUNC(GStrv, g_strfreev, NULL)
> 
> and indeed if you read to the bottom of the documentation page you
> will find:
> 
>    typedef gchar** GStrv;
> 
>    A typedef alias for gchar**. This is mostly useful when used together with g_auto().
> 
> So fix up all the g_autofree g_strsplit case that smugly thought they
> had de-allocation covered.
> 
> Message-Id: <20230519170454.2353945-3-alex.bennee@linaro.org>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


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

* Re: [PATCH 20/26] plugins: update lockstep to use g_memdup2
  2023-06-23 12:20 ` [PATCH 20/26] plugins: update lockstep to use g_memdup2 Alex Bennée
@ 2023-06-26  8:25   ` Richard Henderson
  0 siblings, 0 replies; 47+ messages in thread
From: Richard Henderson @ 2023-06-26  8:25 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 6/23/23 14:20, Alex Bennée wrote:
> The old g_memdup is deprecated, use the replacement.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   contrib/plugins/lockstep.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~


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

* Re: [PATCH 26/26] docs/devel: introduce some key concepts for QOM development
  2023-06-23 12:21 ` [PATCH 26/26] docs/devel: introduce some key concepts for QOM development Alex Bennée
@ 2023-06-26 13:27   ` Paolo Bonzini
  2023-06-26 13:39     ` Alex Bennée
  0 siblings, 1 reply; 47+ messages in thread
From: Paolo Bonzini @ 2023-06-26 13:27 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Richard Henderson, Juan Quintela, Peter Maydell, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Bandan Das, Marcin Juszkiewicz,
	Radoslaw Biernacki, Alexander Bulekov, Leif Lindholm, Qiuhao Li,
	Wainer dos Santos Moschetta, Marcel Apfelbaum, Leonardo Bras,
	Philippe Mathieu-Daudé, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang

On 6/23/23 14:21, Alex Bennée wrote:
> Using QOM correctly is increasingly important to maintaining a modern
> code base. However the current documentation skips some important
> concepts before launching into a simple example. Lets:
> 
>    - at least mention properties
>    - mention TYPE_OBJECT and TYPE_DEVICE
>    - talk about why we have realize/unrealize
>    - mention the QOM tree
> 
> Signed-off-by: Alex Bennée<alex.bennee@linaro.org>
> Message-Id:<20230619171437.357374-6-alex.bennee@linaro.org>

There were review comments on this series that haven't been applied.

Paolo



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

* Re: [PATCH 26/26] docs/devel: introduce some key concepts for QOM development
  2023-06-26 13:27   ` Paolo Bonzini
@ 2023-06-26 13:39     ` Alex Bennée
  2023-06-26 15:43       ` Paolo Bonzini
  0 siblings, 1 reply; 47+ messages in thread
From: Alex Bennée @ 2023-06-26 13:39 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: qemu-devel, Richard Henderson, Juan Quintela, Peter Maydell,
	Cleber Rosa, Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Bandan Das, Marcin Juszkiewicz,
	Radoslaw Biernacki, Alexander Bulekov, Leif Lindholm, Qiuhao Li,
	Wainer dos Santos Moschetta, Marcel Apfelbaum, Leonardo Bras,
	Philippe Mathieu-Daudé, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang


Paolo Bonzini <pbonzini@redhat.com> writes:

> On 6/23/23 14:21, Alex Bennée wrote:
>> Using QOM correctly is increasingly important to maintaining a modern
>> code base. However the current documentation skips some important
>> concepts before launching into a simple example. Lets:
>>    - at least mention properties
>>    - mention TYPE_OBJECT and TYPE_DEVICE
>>    - talk about why we have realize/unrealize
>>    - mention the QOM tree
>> Signed-off-by: Alex Bennée<alex.bennee@linaro.org>
>> Message-Id:<20230619171437.357374-6-alex.bennee@linaro.org>
>
> There were review comments on this series that haven't been applied.

Sorry I'd missed those. I've fixed that for the respin which is
currently checking on CI.

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


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

* Re: [PATCH 26/26] docs/devel: introduce some key concepts for QOM development
  2023-06-26 13:39     ` Alex Bennée
@ 2023-06-26 15:43       ` Paolo Bonzini
  0 siblings, 0 replies; 47+ messages in thread
From: Paolo Bonzini @ 2023-06-26 15:43 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Richard Henderson, Juan Quintela, Peter Maydell,
	Cleber Rosa, Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Bandan Das, Marcin Juszkiewicz,
	Radoslaw Biernacki, Alexander Bulekov, Leif Lindholm, Qiuhao Li,
	Wainer dos Santos Moschetta, Marcel Apfelbaum, Leonardo Bras,
	Philippe Mathieu-Daudé, Stefan Hajnoczi, Bin Meng,
	Thomas Huth, Beraldo Leal, Laurent Vivier, Yanan Wang

On 6/26/23 15:39, Alex Bennée wrote:
>> There were review comments on this series that haven't been applied.
> Sorry I'd missed those. I've fixed that for the respin which is
> currently checking on CI.

Still not exactly what I asked for; please remove the "The Device Class" 
heading (just the heading, the content is good there) and change "API 
Reference" to an "======" heading.

Thanks,

Paolo



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

* Re: [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index
  2023-06-23 12:25   ` Peter Maydell
@ 2023-06-26 20:21     ` Alex Bennée
  0 siblings, 0 replies; 47+ messages in thread
From: Alex Bennée @ 2023-06-26 20:21 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Richard Henderson, Juan Quintela, Cleber Rosa,
	Darren Kenny, Alexandre Iooss, Peter Xu, qemu-arm,
	Eduardo Habkost, Riku Voipio, Mahmoud Mandour,
	Daniel P. Berrangé, Paolo Bonzini, Bandan Das,
	Marcin Juszkiewicz, Radoslaw Biernacki, Alexander Bulekov,
	Leif Lindholm, Qiuhao Li, Wainer dos Santos Moschetta,
	Marcel Apfelbaum, Leonardo Bras, Philippe Mathieu-Daudé,
	Stefan Hajnoczi, Bin Meng, Thomas Huth, Beraldo Leal,
	Laurent Vivier, Yanan Wang


Peter Maydell <peter.maydell@linaro.org> writes:

> On Fri, 23 Jun 2023 at 13:21, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> We can return XKB_MOD_INVALID which rightly gets flagged by sanitisers
>> as an overly wide shift attempt.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> Same comments as on the first version of this patch:
> looks OK code-wise, but have you eyeballed the output?

I've eyeballed it but practically it doesn't seem to make any difference
to the output:

  🕙21:20:36 alex@zen:qemu.git/builds/all  (399fc0c) (REBASING 2/22) [$!?] 
  ➜  diff -ub gb.before gb.after
  🕙21:20:43 alex@zen:qemu.git/builds/all  (399fc0c) (REBASING 2/22) [$!?] 
  ➜  diff -ub ara.before ara.after

> Does the keyboard layout that triggers this have no
> AltGr at all, or does it call it by a different name?

Certainly not ara or gb:

  9: Alt
23:#    11: LAlt
24:#    12: RAlt
29:#    17: AltGr
294:Alt_L 0x38
1711:Alt_R 0xb8
🕙21:22:14 alex@zen:qemu.git/builds/all  (399fc0c) (REBASING 2/22) [$!?] 
➜  ag "Alt" gb.after 
21:#     9: Alt
23:#    11: LAlt
24:#    12: RAlt
29:#    17: AltGr
338:Alt_L 0x38
1757:Alt_R 0xb8

>
> thanks
> -- PMM


-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


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

end of thread, other threads:[~2023-06-26 20:24 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-23 12:20 [PATCH 00/26] maintainer omnibus: testing, fuzz, plugins, documentation Alex Bennée
2023-06-23 12:20 ` [PATCH 01/26] gitlab: explicit set artifacts publishing criteria Alex Bennée
2023-06-26  7:58   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 02/26] gitlab: ensure coverage job also publishes meson log Alex Bennée
2023-06-26  7:59   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 03/26] gitlab: reduce testing scope of check-gcov Alex Bennée
2023-06-26  7:59   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 04/26] docs/devel: remind developers to run CI container pipeline when updating images Alex Bennée
2023-06-23 12:20 ` [PATCH 05/26] tests/tcg: add mechanism to handle plugin arguments Alex Bennée
2023-06-23 12:20 ` [PATCH 06/26] qemu-keymap: use modern name for Arabic keymap Alex Bennée
2023-06-23 12:23   ` Peter Maydell
2023-06-23 12:20 ` [PATCH 07/26] qemu-keymap: properly check return from xkb_keymap_mod_get_index Alex Bennée
2023-06-23 12:25   ` Peter Maydell
2023-06-26 20:21     ` Alex Bennée
2023-06-23 12:20 ` [PATCH 08/26] scripts/oss-fuzz: add a suppression for keymap Alex Bennée
2023-06-26  8:02   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 09/26] tests/qtests: clean-up and fix leak in generic_fuzz Alex Bennée
2023-06-26  8:06   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 10/26] tests/docker: add test-fuzz Alex Bennée
2023-06-23 12:20 ` [PATCH 11/26] Makefile: add lcitool-refresh to UNCHECKED_GOALS Alex Bennée
2023-06-23 15:10   ` Philippe Mathieu-Daudé
2023-06-23 12:20 ` [PATCH 12/26] tests/lcitool: update to latest version Alex Bennée
2023-06-26  8:08   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 13/26] tests/lcitool: Bump fedora container versions Alex Bennée
2023-06-26  8:09   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 14/26] tests/lcitool: add an explicit gcc-native package Alex Bennée
2023-06-26  8:10   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 15/26] tests/lcitool: introduce qemu-minimal Alex Bennée
2023-06-26  8:14   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 16/26] tests/docker: convert riscv64-cross to lcitool Alex Bennée
2023-06-26  8:16   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 17/26] tests/avocado: update firmware to enable sbsa-ref/max Alex Bennée
2023-06-23 15:14   ` Philippe Mathieu-Daudé
2023-06-23 12:20 ` [PATCH 18/26] plugins: force slow path when plugins instrument memory ops Alex Bennée
2023-06-23 12:20 ` [PATCH 19/26] plugins: fix memory leak while parsing options Alex Bennée
2023-06-26  8:24   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 20/26] plugins: update lockstep to use g_memdup2 Alex Bennée
2023-06-26  8:25   ` Richard Henderson
2023-06-23 12:20 ` [PATCH 21/26] docs/devel: add some front matter to the devel index Alex Bennée
2023-06-23 12:20 ` [PATCH 22/26] include/migration: mark vmstate_register() as a legacy function Alex Bennée
2023-06-23 12:20 ` [PATCH 23/26] include/hw/qdev-core: fixup kerneldoc annotations Alex Bennée
2023-06-23 12:20 ` [PATCH 24/26] docs/devel/qom.rst: Correct code style Alex Bennée
2023-06-23 12:20 ` [PATCH 25/26] docs/devel: split qom-api reference into new file Alex Bennée
2023-06-23 12:21 ` [PATCH 26/26] docs/devel: introduce some key concepts for QOM development Alex Bennée
2023-06-26 13:27   ` Paolo Bonzini
2023-06-26 13:39     ` Alex Bennée
2023-06-26 15:43       ` Paolo Bonzini

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).