* [PATCH v1 00/22] testing and plugin updates
@ 2022-01-24 20:15 Alex Bennée
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
` (21 more replies)
0 siblings, 22 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr, Alex Bennée
Hi,
Here is the usual accumulation of testing patches along with some
updates for TCG plugins. Aside from a few more tricks for some of the
plugins I've also fixed a bug and done some tidying up of the gcov
behaviour. I've included one patch to test the stxp behaviour but I'll
drop it before any PR so no need to review that one. Of the rest quite
a few could still do with some review:
- plugins: move reset of plugin data to tb_start
- target/i386: use CPU_LOG_INT for IRQ servicing
- tests/plugins: add instruction matching to libinsn.so
- tests/plugin: allow libinsn.so per-CPU counts
- .gitignore: add .gcov pattern
- Makefile: also remove .gcno files when cleaning
- tests/qtest: enable more vhost-user tests by default
- tests/Makefile.include: clean-up old code
Alex Bennée (13):
tests/Makefile.include: clean-up old code
tests/qtest: enable more vhost-user tests by default
Makefile: also remove .gcno files when cleaning
.gitignore: add .gcov pattern
plugins: stxp test case from Aaron (!upstream)
docs: remove references to TCG tracing
tracing: remove TCG memory access tracing
tracing: remove the trace-tcg includes from the build
tracing: excise the tcg related from tracetool
tests/plugin: allow libinsn.so per-CPU counts
tests/plugins: add instruction matching to libinsn.so
target/i386: use CPU_LOG_INT for IRQ servicing
plugins: move reset of plugin data to tb_start
Ivanov Arkady (2):
plugins: add helper functions for coverage plugins
contrib/plugins: add a drcov plugin
Michael Tokarev (1):
drop libxml2 checks since libxml is not actually used (for parallels)
Philippe Mathieu-Daudé (6):
MAINTAINERS: Cover lcitool submodule with build test / automation
gitmodules: Correct libvirt-ci submodule URL
tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files
tests/lcitool: Refresh submodule and remove libxml2
tests: Manually remove libxml2 on MSYS2 runners
tests/lcitool: Install libibumad to cover RDMA on Debian based distros
docs/about/removed-features.rst | 13 ++
docs/devel/tracing.rst | 85 ---------
Makefile | 3 +-
meson.build | 10 --
accel/tcg/atomic_template.h | 12 --
include/exec/helper-gen.h | 2 -
include/exec/helper-proto.h | 1 -
include/exec/helper-tcg.h | 1 -
include/qemu/qemu-plugin.h | 34 ++++
include/trace-tcg.h | 6 -
accel/tcg/cputlb.c | 2 -
accel/tcg/plugin-gen.c | 29 ++--
accel/tcg/user-exec.c | 14 --
contrib/plugins/drcov.c | 163 ++++++++++++++++++
contrib/plugins/stxp-plugin.c | 50 ++++++
plugins/api.c | 46 +++++
target/i386/tcg/sysemu/seg_helper.c | 4 +-
tcg/tcg-op.c | 5 -
tests/plugin/insn.c | 125 +++++++++++++-
tests/qtest/vhost-user-test.c | 21 +--
tests/tcg/aarch64/stxp.c | 28 +++
accel/tcg/atomic_common.c.inc | 20 ---
.cirrus.yml | 1 -
.gitignore | 1 +
.gitlab-ci.d/cirrus/freebsd-12.vars | 2 +-
.gitlab-ci.d/cirrus/freebsd-13.vars | 2 +-
.gitlab-ci.d/cirrus/macos-11.vars | 2 +-
.gitlab-ci.d/windows.yml | 2 -
.gitmodules | 2 +-
MAINTAINERS | 1 +
block/meson.build | 3 +-
contrib/plugins/Makefile | 2 +
meson_options.txt | 2 -
plugins/qemu-plugins.symbols | 4 +
scripts/checkpatch.pl | 1 -
.../ci/org.centos/stream/8/x86_64/configure | 1 -
scripts/coverity-scan/coverity-scan.docker | 1 -
scripts/coverity-scan/run-coverity-scan | 2 +-
scripts/meson-buildoptions.sh | 3 -
scripts/tracetool/__init__.py | 41 +----
scripts/tracetool/format/tcg_h.py | 83 ---------
scripts/tracetool/format/tcg_helper_c.py | 79 ---------
scripts/tracetool/format/tcg_helper_h.py | 48 ------
.../tracetool/format/tcg_helper_wrapper_h.py | 70 --------
scripts/tracetool/vcpu.py | 14 +-
tests/Makefile.include | 4 -
tests/docker/dockerfiles/alpine.docker | 4 +-
tests/docker/dockerfiles/centos8.docker | 4 +-
tests/docker/dockerfiles/fedora.docker | 4 +-
tests/docker/dockerfiles/opensuse-leap.docker | 3 +-
tests/docker/dockerfiles/ubuntu1804.docker | 4 +-
tests/docker/dockerfiles/ubuntu2004.docker | 4 +-
tests/lcitool/libvirt-ci | 2 +-
tests/lcitool/projects/qemu.yml | 2 +-
tests/lcitool/refresh | 2 +-
tests/tcg/aarch64/Makefile.target | 3 +
trace-events | 14 --
trace/meson.build | 14 --
58 files changed, 515 insertions(+), 590 deletions(-)
delete mode 100644 include/trace-tcg.h
create mode 100644 contrib/plugins/drcov.c
create mode 100644 contrib/plugins/stxp-plugin.c
create mode 100644 tests/tcg/aarch64/stxp.c
delete mode 100644 scripts/tracetool/format/tcg_h.py
delete mode 100644 scripts/tracetool/format/tcg_helper_c.py
delete mode 100644 scripts/tracetool/format/tcg_helper_h.py
delete mode 100644 scripts/tracetool/format/tcg_helper_wrapper_h.py
--
2.30.2
^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v1 01/22] tests/Makefile.include: clean-up old code
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:38 ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default Alex Bennée
` (20 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr, Alex Bennée
This is no longer needed since 5516623020 ("meson: convert migration
directory to Meson")
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/Makefile.include | 4 ----
1 file changed, 4 deletions(-)
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 3aba622400..47cc7bc40c 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -34,10 +34,6 @@ endif
ifneq ($(wildcard config-host.mak),)
export SRC_PATH
-# Get the list of all supported sysemu targets
-SYSEMU_TARGET_LIST := $(subst -softmmu.mak,,$(notdir \
- $(wildcard $(SRC_PATH)/configs/*-softmmu.mak)))
-
SPEED = quick
# Build up our target list from the filtered list of ninja targets
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-25 8:18 ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning Alex Bennée
` (19 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Laurent Vivier, Thomas Huth, aaron, robhenry, mahmoudabdalghany,
minyihh, cota, Luke.Craig, Paolo Bonzini, kuhn.chenqun,
ma.mandourr, Alex Bennée
If this starts causing failures again we should probably fix that.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/qtest/vhost-user-test.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/tests/qtest/vhost-user-test.c b/tests/qtest/vhost-user-test.c
index 3d6337fb5c..2a4568cd7d 100644
--- a/tests/qtest/vhost-user-test.c
+++ b/tests/qtest/vhost-user-test.c
@@ -995,20 +995,17 @@ static void register_vhost_user_test(void)
"virtio-net",
test_migrate, &opts);
- /* keeps failing on build-system since Aug 15 2017 */
- if (getenv("QTEST_VHOST_USER_FIXME")) {
- opts.before = vhost_user_test_setup_reconnect;
- qos_add_test("vhost-user/reconnect", "virtio-net",
- test_reconnect, &opts);
+ opts.before = vhost_user_test_setup_reconnect;
+ qos_add_test("vhost-user/reconnect", "virtio-net",
+ test_reconnect, &opts);
- opts.before = vhost_user_test_setup_connect_fail;
- qos_add_test("vhost-user/connect-fail", "virtio-net",
- test_vhost_user_started, &opts);
+ opts.before = vhost_user_test_setup_connect_fail;
+ qos_add_test("vhost-user/connect-fail", "virtio-net",
+ test_vhost_user_started, &opts);
- opts.before = vhost_user_test_setup_flags_mismatch;
- qos_add_test("vhost-user/flags-mismatch", "virtio-net",
- test_vhost_user_started, &opts);
- }
+ opts.before = vhost_user_test_setup_flags_mismatch;
+ qos_add_test("vhost-user/flags-mismatch", "virtio-net",
+ test_vhost_user_started, &opts);
opts.before = vhost_user_test_setup_multiqueue;
opts.edge.extra_device_opts = "mq=on";
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
2022-01-24 20:15 ` [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-25 7:40 ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 04/22] .gitignore: add .gcov pattern Alex Bennée
` (18 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr, Alex Bennée
Left over .gcno files from old builds can really confuse gcov and the
user expects a clean slate after "make clean". Make clean mean clean.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index db9a788601..65e0d2dd4e 100644
--- a/Makefile
+++ b/Makefile
@@ -206,7 +206,8 @@ recurse-clean: $(addsuffix /clean, $(ROM_DIRS))
clean: recurse-clean
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean || :
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) clean-ctlist || :
- find . \( -name '*.so' -o -name '*.dll' -o -name '*.[oda]' \) -type f \
+ find . \( -name '*.so' -o -name '*.dll' -o \
+ -name '*.[oda]' -o -name '*.gcno' \) -type f \
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-aarch64.a \
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \
-exec rm {} +
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 04/22] .gitignore: add .gcov pattern
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (2 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:38 ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 05/22] MAINTAINERS: Cover lcitool submodule with build test / automation Alex Bennée
` (17 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr, Alex Bennée
The gcovr tool is very messy and can leave a lot of crap in the source
tree even when using build directories.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index eb2553026c..9726a778b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@ GTAGS
*.depend_raw
*.swp
*.patch
+*.gcov
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 05/22] MAINTAINERS: Cover lcitool submodule with build test / automation
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (3 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 04/22] .gitignore: add .gcov pattern Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:15 ` [PATCH v1 06/22] gitmodules: Correct libvirt-ci submodule URL Alex Bennée
` (16 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Luke.Craig, kuhn.chenqun,
ma.mandourr, Alex Bennée
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
lcitool is used by build test / automation, we want maintainers
to get notified if the submodule is updated.
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-2-f4bug@amsat.org>
---
MAINTAINERS | 1 +
1 file changed, 1 insertion(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index e4b3a4bcdf..6d5539d46f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3579,6 +3579,7 @@ F: .travis.yml
F: scripts/ci/
F: tests/docker/
F: tests/vm/
+F: tests/lcitool/
F: scripts/archive-source.sh
W: https://gitlab.com/qemu-project/qemu/pipelines
W: https://travis-ci.org/qemu/qemu
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 06/22] gitmodules: Correct libvirt-ci submodule URL
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (4 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 05/22] MAINTAINERS: Cover lcitool submodule with build test / automation Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:15 ` [PATCH v1 07/22] tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files Alex Bennée
` (15 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Luke.Craig, kuhn.chenqun,
ma.mandourr, Alex Bennée
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
Correct the libvirt-ci repository URL to avoid this warning when
cloning / refreshing the submodule:
warning: redirecting to https://gitlab.com/libvirt/libvirt-ci.git/
Fixes: 4ebb040f1fd ("tests: integrate lcitool for generating build env manifests")
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-3-f4bug@amsat.org>
---
.gitmodules | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.gitmodules b/.gitmodules
index 84425d87e2..f4b6a9b401 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -66,4 +66,4 @@
url = https://gitlab.com/qemu-project/vbootrom.git
[submodule "tests/lcitool/libvirt-ci"]
path = tests/lcitool/libvirt-ci
- url = http://gitlab.com/libvirt/libvirt-ci
+ url = https://gitlab.com/libvirt/libvirt-ci.git
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 07/22] tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (5 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 06/22] gitmodules: Correct libvirt-ci submodule URL Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:15 ` [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels) Alex Bennée
` (14 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
Beraldo Leal, aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Alex Bennée
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
The script only include the local qemu.yml for Dockerfiles.
Since we want to keep the Cirrus-CI generated files in sync,
also use the --data-dir option in generate_cirrus().
Fixes: c45a540f4bd (".gitlab-ci.d/cirrus: auto-generate variables with lcitool")
Reported-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-4-f4bug@amsat.org>
---
tests/lcitool/refresh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 033120e223..25301f2ef0 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -62,7 +62,7 @@ def generate_dockerfile(host, target, cross=None, trailer=None):
def generate_cirrus(target, trailer=None):
filename = Path(src_dir, ".gitlab-ci.d", "cirrus", target + ".vars")
- cmd = [lcitool_path, "variables", target, "qemu"]
+ cmd = lcitool_cmd + ["variables", target, "qemu"]
generate(filename, cmd, trailer)
ubuntu1804_skipssh = [
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels)
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (6 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 07/22] tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-25 21:29 ` Vladimir Sementsov-Ogievskiy
2022-01-24 20:15 ` [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2 Alex Bennée
` (13 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Hanna Reitz, Thomas Huth, Stefan Hajnoczi,
open list:Block layer core, Peter Maydell, Michael Tokarev,
aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Alex Bennée,
Beraldo Leal
From: Michael Tokarev <mjt@tls.msk.ru>
For a long time, we assumed that libxml2 is necessary for parallels
block format support (block/parallels*). However, this format actually
does not use libxml [*]. Since this is the only user of libxml2 in
whole QEMU tree, we can drop all libxml2 checks and dependencies too.
It is even more: --enable-parallels configure option was the only
option which was silently ignored when it's (fake) dependency
(libxml2) isn't installed.
Drop all mentions of libxml2.
[*] Actually the basis for libxml use were introduced in commit
ed279a06c53 ("configure: add dependency") but the implementation
was never merged:
https://lore.kernel.org/qemu-devel/70227bbd-a517-70e9-714f-e6e0ec431be9@openvz.org/
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20220119090423.149315-1-mjt@msgid.tls.msk.ru>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
[PMD: Updated description and adapted to use lcitool]
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-5-f4bug@amsat.org>
---
meson.build | 6 ------
block/meson.build | 3 +--
meson_options.txt | 2 --
scripts/checkpatch.pl | 1 -
scripts/ci/org.centos/stream/8/x86_64/configure | 1 -
scripts/coverity-scan/coverity-scan.docker | 1 -
scripts/coverity-scan/run-coverity-scan | 2 +-
scripts/meson-buildoptions.sh | 3 ---
8 files changed, 2 insertions(+), 17 deletions(-)
diff --git a/meson.build b/meson.build
index 833fd6bc4c..51e3090438 100644
--- a/meson.build
+++ b/meson.build
@@ -451,11 +451,6 @@ if not get_option('linux_io_uring').auto() or have_block
required: get_option('linux_io_uring'),
method: 'pkg-config', kwargs: static_kwargs)
endif
-libxml2 = not_found
-if not get_option('libxml2').auto() or have_block
- libxml2 = dependency('libxml-2.0', required: get_option('libxml2'),
- method: 'pkg-config', kwargs: static_kwargs)
-endif
libnfs = not_found
if not get_option('libnfs').auto() or have_block
libnfs = dependency('libnfs', version: '>=1.9.3',
@@ -3491,7 +3486,6 @@ summary_info += {'bzip2 support': libbzip2}
summary_info += {'lzfse support': liblzfse}
summary_info += {'zstd support': zstd}
summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
-summary_info += {'libxml2': libxml2}
summary_info += {'capstone': capstone_opt == 'internal' ? capstone_opt : capstone}
summary_info += {'libpmem support': libpmem}
summary_info += {'libdaxctl support': libdaxctl}
diff --git a/block/meson.build b/block/meson.build
index deb73ca389..90dc9983e5 100644
--- a/block/meson.build
+++ b/block/meson.build
@@ -58,8 +58,7 @@ block_ss.add(when: 'CONFIG_QED', if_true: files(
'qed-table.c',
'qed.c',
))
-block_ss.add(when: [libxml2, 'CONFIG_PARALLELS'],
- if_true: files('parallels.c', 'parallels-ext.c'))
+block_ss.add(when: 'CONFIG_PARALLELS', if_true: files('parallels.c', 'parallels-ext.c'))
block_ss.add(when: 'CONFIG_WIN32', if_true: files('file-win32.c', 'win32-aio.c'))
block_ss.add(when: 'CONFIG_POSIX', if_true: [files('file-posix.c'), coref, iokit])
block_ss.add(when: libiscsi, if_true: files('iscsi-opts.c'))
diff --git a/meson_options.txt b/meson_options.txt
index 921967eddb..95d527f773 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -113,8 +113,6 @@ option('libudev', type : 'feature', value : 'auto',
description: 'Use libudev to enumerate host devices')
option('libusb', type : 'feature', value : 'auto',
description: 'libusb support for USB passthrough')
-option('libxml2', type : 'feature', value : 'auto',
- description: 'libxml2 support for Parallels image format')
option('linux_aio', type : 'feature', value : 'auto',
description: 'Linux AIO support')
option('linux_io_uring', type : 'feature', value : 'auto',
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 5caa739db4..5e50111060 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -307,7 +307,6 @@ our @typeList = (
qr{target_(?:u)?long},
qr{hwaddr},
# external libraries
- qr{xml${Ident}},
qr{xen\w+_handle},
# Glib definitions
qr{gchar},
diff --git a/scripts/ci/org.centos/stream/8/x86_64/configure b/scripts/ci/org.centos/stream/8/x86_64/configure
index e05f2fddcc..9850dd4444 100755
--- a/scripts/ci/org.centos/stream/8/x86_64/configure
+++ b/scripts/ci/org.centos/stream/8/x86_64/configure
@@ -81,7 +81,6 @@
--disable-libssh \
--disable-libudev \
--disable-libusb \
---disable-libxml2 \
--disable-linux-aio \
--disable-linux-io-uring \
--disable-linux-user \
diff --git a/scripts/coverity-scan/coverity-scan.docker b/scripts/coverity-scan/coverity-scan.docker
index ecff6ac5b4..6f60a52d23 100644
--- a/scripts/coverity-scan/coverity-scan.docker
+++ b/scripts/coverity-scan/coverity-scan.docker
@@ -59,7 +59,6 @@ ENV PACKAGES \
libubsan \
libudev-devel \
libusbx-devel \
- libxml2-devel \
libzstd-devel \
llvm \
lzo-devel \
diff --git a/scripts/coverity-scan/run-coverity-scan b/scripts/coverity-scan/run-coverity-scan
index 6d443250a9..181bdcb263 100755
--- a/scripts/coverity-scan/run-coverity-scan
+++ b/scripts/coverity-scan/run-coverity-scan
@@ -402,7 +402,7 @@ echo "Configuring..."
--enable-libiscsi --enable-libnfs --enable-seccomp \
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
--enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \
- --enable-mpath --enable-libxml2 --enable-glusterfs \
+ --enable-mpath --enable-glusterfs \
--enable-virtfs --enable-zstd
echo "Running cov-build..."
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index a4af02c527..48a454cece 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -58,7 +58,6 @@ meson_options_help() {
printf "%s\n" ' libssh ssh block device support'
printf "%s\n" ' libudev Use libudev to enumerate host devices'
printf "%s\n" ' libusb libusb support for USB passthrough'
- printf "%s\n" ' libxml2 libxml2 support for Parallels image format'
printf "%s\n" ' linux-aio Linux AIO support'
printf "%s\n" ' linux-io-uring Linux io_uring support'
printf "%s\n" ' lzfse lzfse support for DMG images'
@@ -188,8 +187,6 @@ _meson_option_parse() {
--disable-libudev) printf "%s" -Dlibudev=disabled ;;
--enable-libusb) printf "%s" -Dlibusb=enabled ;;
--disable-libusb) printf "%s" -Dlibusb=disabled ;;
- --enable-libxml2) printf "%s" -Dlibxml2=enabled ;;
- --disable-libxml2) printf "%s" -Dlibxml2=disabled ;;
--enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;;
--disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;;
--enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;;
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (7 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels) Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-25 10:23 ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 10/22] tests: Manually remove libxml2 on MSYS2 runners Alex Bennée
` (12 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
Beraldo Leal, aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Alex Bennée
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
The previous commit removed all uses of libxml2.
Refresh lcitool submodule, update qemu.yml and refresh the generated
files by running:
$ make lcitool-refresh
Note: This refreshment also removes libudev dependency on Fedora
and CentOS due to libvirt-ci commit 18bfaee ("mappings: Improve
mapping for libudev"), since "The udev project has been absorbed
by the systemd project", and lttng-ust on FreeBSD runners due to
libvirt-ci commit 6dd9b6f ("guests: drop lttng-ust from FreeBSD
platform").
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-6-f4bug@amsat.org>
---
.gitlab-ci.d/cirrus/freebsd-12.vars | 2 +-
.gitlab-ci.d/cirrus/freebsd-13.vars | 2 +-
.gitlab-ci.d/cirrus/macos-11.vars | 2 +-
tests/docker/dockerfiles/alpine.docker | 4 ++--
tests/docker/dockerfiles/centos8.docker | 4 +---
tests/docker/dockerfiles/fedora.docker | 4 +---
tests/docker/dockerfiles/opensuse-leap.docker | 3 +--
tests/docker/dockerfiles/ubuntu1804.docker | 3 +--
tests/docker/dockerfiles/ubuntu2004.docker | 3 +--
tests/lcitool/libvirt-ci | 2 +-
tests/lcitool/projects/qemu.yml | 1 -
11 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/.gitlab-ci.d/cirrus/freebsd-12.vars b/.gitlab-ci.d/cirrus/freebsd-12.vars
index 9c52266811..07f313aa3a 100644
--- a/.gitlab-ci.d/cirrus/freebsd-12.vars
+++ b/.gitlab-ci.d/cirrus/freebsd-12.vars
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip-3.8'
-PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
+PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PYPI_PKGS=''
PYTHON='/usr/local/bin/python3'
diff --git a/.gitlab-ci.d/cirrus/freebsd-13.vars b/.gitlab-ci.d/cirrus/freebsd-13.vars
index 7b44dba324..8a648dda1e 100644
--- a/.gitlab-ci.d/cirrus/freebsd-13.vars
+++ b/.gitlab-ci.d/cirrus/freebsd-13.vars
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip-3.8'
-PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
+PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
PYPI_PKGS=''
PYTHON='/usr/local/bin/python3'
diff --git a/.gitlab-ci.d/cirrus/macos-11.vars b/.gitlab-ci.d/cirrus/macos-11.vars
index 613d1373c2..08183f8793 100644
--- a/.gitlab-ci.d/cirrus/macos-11.vars
+++ b/.gitlab-ci.d/cirrus/macos-11.vars
@@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='brew'
PIP3='/usr/local/bin/pip3'
-PKGS='bash bc bzip2 capstone ccache cpanminus ctags curl dbus diffutils dtc gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb libxml2 llvm lzo make meson ncurses nettle ninja perl pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy sparse spice-protocol tesseract texinfo usbredir vde vte3 zlib zstd'
+PKGS='bash bc bzip2 capstone ccache cpanminus ctags curl dbus diffutils dtc gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson ncurses nettle ninja perl pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy sparse spice-protocol tesseract texinfo usbredir vde vte3 zlib zstd'
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme virtualenv'
PYTHON='/usr/local/bin/python3'
diff --git a/tests/docker/dockerfiles/alpine.docker b/tests/docker/dockerfiles/alpine.docker
index eb2251c81c..591af43d60 100644
--- a/tests/docker/dockerfiles/alpine.docker
+++ b/tests/docker/dockerfiles/alpine.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile alpine-edge qemu
+# $ lcitool dockerfile --layers all alpine-edge qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -56,7 +56,6 @@ RUN apk update && \
libtasn1-dev \
liburing-dev \
libusb-dev \
- libxml2-dev \
linux-pam-dev \
llvm11 \
lttng-ust-dev \
@@ -109,6 +108,7 @@ RUN apk update && \
zlib-dev \
zlib-static \
zstd-dev && \
+ apk list | sort > /packages.txt && \
mkdir -p /usr/libexec/ccache-wrappers && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/c++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/cc && \
diff --git a/tests/docker/dockerfiles/centos8.docker b/tests/docker/dockerfiles/centos8.docker
index cbb909d02b..3abac7a8b1 100644
--- a/tests/docker/dockerfiles/centos8.docker
+++ b/tests/docker/dockerfiles/centos8.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile centos-8 qemu
+# $ lcitool dockerfile --layers all centos-8 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -69,10 +69,8 @@ RUN dnf update -y && \
libssh-devel \
libtasn1-devel \
libubsan \
- libudev-devel \
liburing-devel \
libusbx-devel \
- libxml2-devel \
libzstd-devel \
llvm \
lttng-ust-devel \
diff --git a/tests/docker/dockerfiles/fedora.docker b/tests/docker/dockerfiles/fedora.docker
index 60207f3da3..1d01cd9440 100644
--- a/tests/docker/dockerfiles/fedora.docker
+++ b/tests/docker/dockerfiles/fedora.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile fedora-35 qemu
+# $ lcitool dockerfile --layers all fedora-35 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -77,10 +77,8 @@ exec "$@"' > /usr/bin/nosync && \
libssh-devel \
libtasn1-devel \
libubsan \
- libudev-devel \
liburing-devel \
libusbx-devel \
- libxml2-devel \
libzstd-devel \
llvm \
lttng-ust-devel \
diff --git a/tests/docker/dockerfiles/opensuse-leap.docker b/tests/docker/dockerfiles/opensuse-leap.docker
index f57d8cfb29..1b78d8369a 100644
--- a/tests/docker/dockerfiles/opensuse-leap.docker
+++ b/tests/docker/dockerfiles/opensuse-leap.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile opensuse-leap-152 qemu
+# $ lcitool dockerfile --layers all opensuse-leap-152 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -71,7 +71,6 @@ RUN zypper update -y && \
libudev-devel \
liburing-devel \
libusb-1_0-devel \
- libxml2-devel \
libzstd-devel \
llvm \
lttng-ust-devel \
diff --git a/tests/docker/dockerfiles/ubuntu1804.docker b/tests/docker/dockerfiles/ubuntu1804.docker
index 0ffa3c4d4b..003ee2cfed 100644
--- a/tests/docker/dockerfiles/ubuntu1804.docker
+++ b/tests/docker/dockerfiles/ubuntu1804.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile ubuntu-1804 qemu
+# $ lcitool dockerfile --layers all ubuntu-1804 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -89,7 +89,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libvirglrenderer-dev \
libvte-2.91-dev \
libxen-dev \
- libxml2-dev \
libzstd-dev \
llvm \
locales \
diff --git a/tests/docker/dockerfiles/ubuntu2004.docker b/tests/docker/dockerfiles/ubuntu2004.docker
index 4e562dfdcd..8993d2d9e0 100644
--- a/tests/docker/dockerfiles/ubuntu2004.docker
+++ b/tests/docker/dockerfiles/ubuntu2004.docker
@@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED
#
-# $ lcitool dockerfile ubuntu-2004 qemu
+# $ lcitool dockerfile --layers all ubuntu-2004 qemu
#
# https://gitlab.com/libvirt/libvirt-ci
@@ -91,7 +91,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libvirglrenderer-dev \
libvte-2.91-dev \
libxen-dev \
- libxml2-dev \
libzstd-dev \
llvm \
locales \
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
index 29cec2153b..6dd9b6fab1 160000
--- a/tests/lcitool/libvirt-ci
+++ b/tests/lcitool/libvirt-ci
@@ -1 +1 @@
-Subproject commit 29cec2153b9a4dbb2e66f1cbc9866a4eff519cfd
+Subproject commit 6dd9b6fab1fe081b16bc975485d7a02c81ba5fbe
diff --git a/tests/lcitool/projects/qemu.yml b/tests/lcitool/projects/qemu.yml
index ed5ab1407a..de51a2f1dd 100644
--- a/tests/lcitool/projects/qemu.yml
+++ b/tests/lcitool/projects/qemu.yml
@@ -63,7 +63,6 @@ packages:
- liburing
- libusbx
- libvdeplug
- - libxml2
- libzstd
- llvm
- lttng-ust
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 10/22] tests: Manually remove libxml2 on MSYS2 runners
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (8 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2 Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:15 ` [PATCH v1 11/22] tests/lcitool: Install libibumad to cover RDMA on Debian based distros Alex Bennée
` (11 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
Beraldo Leal, aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Ed Maste,
Alex Bennée, Li-Wen Hsu, Yonggang Luo
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
lcitool doesn't support MSYS2 targets, so manually remove
this now unnecessary library.
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-7-f4bug@amsat.org>
---
.cirrus.yml | 1 -
.gitlab-ci.d/windows.yml | 2 --
2 files changed, 3 deletions(-)
diff --git a/.cirrus.yml b/.cirrus.yml
index 02c43a074a..7552d70974 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -32,7 +32,6 @@ windows_msys2_task:
mingw-w64-x86_64-libgcrypt
mingw-w64-x86_64-libpng
mingw-w64-x86_64-libssh
- mingw-w64-x86_64-libxml2
mingw-w64-x86_64-snappy
mingw-w64-x86_64-libusb
mingw-w64-x86_64-usbredir
diff --git a/.gitlab-ci.d/windows.yml b/.gitlab-ci.d/windows.yml
index 62dd9ed832..1df1630349 100644
--- a/.gitlab-ci.d/windows.yml
+++ b/.gitlab-ci.d/windows.yml
@@ -44,7 +44,6 @@ msys2-64bit:
mingw-w64-x86_64-libssh
mingw-w64-x86_64-libtasn1
mingw-w64-x86_64-libusb
- mingw-w64-x86_64-libxml2
mingw-w64-x86_64-nettle
mingw-w64-x86_64-ninja
mingw-w64-x86_64-pixman
@@ -80,7 +79,6 @@ msys2-32bit:
mingw-w64-i686-libssh
mingw-w64-i686-libtasn1
mingw-w64-i686-libusb
- mingw-w64-i686-libxml2
mingw-w64-i686-lzo2
mingw-w64-i686-ninja
mingw-w64-i686-pixman
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 11/22] tests/lcitool: Install libibumad to cover RDMA on Debian based distros
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (9 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 10/22] tests: Manually remove libxml2 on MSYS2 runners Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
` (10 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Thomas Huth, Daniel P . Berrangé,
Beraldo Leal, aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Alex Bennée
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
On Debian we also need libibumad to enable RDMA:
$ ../configure --enable-rdma
ERROR: OpenFabrics librdmacm/libibverbs/libibumad not present.
Your options:
(1) Fast: Install infiniband packages (devel) from your distro.
(2) Cleanest: Install libraries from www.openfabrics.org
(3) Also: Install softiwarp if you don't have RDMA hardware
Add the dependency to lcitool's qemu.yml (where librdmacm and
libibverbs are already listed) and refresh the generated files
by running:
$ make lcitool-refresh
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20220121154134.315047-8-f4bug@amsat.org>
---
tests/docker/dockerfiles/ubuntu1804.docker | 1 +
tests/docker/dockerfiles/ubuntu2004.docker | 1 +
tests/lcitool/projects/qemu.yml | 1 +
3 files changed, 3 insertions(+)
diff --git a/tests/docker/dockerfiles/ubuntu1804.docker b/tests/docker/dockerfiles/ubuntu1804.docker
index 003ee2cfed..699f2dfc6a 100644
--- a/tests/docker/dockerfiles/ubuntu1804.docker
+++ b/tests/docker/dockerfiles/ubuntu1804.docker
@@ -52,6 +52,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libglib2.0-dev \
libgnutls28-dev \
libgtk-3-dev \
+ libibumad-dev \
libibverbs-dev \
libiscsi-dev \
libjemalloc-dev \
diff --git a/tests/docker/dockerfiles/ubuntu2004.docker b/tests/docker/dockerfiles/ubuntu2004.docker
index 8993d2d9e0..87513125b8 100644
--- a/tests/docker/dockerfiles/ubuntu2004.docker
+++ b/tests/docker/dockerfiles/ubuntu2004.docker
@@ -53,6 +53,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
libglusterfs-dev \
libgnutls28-dev \
libgtk-3-dev \
+ libibumad-dev \
libibverbs-dev \
libiscsi-dev \
libjemalloc-dev \
diff --git a/tests/lcitool/projects/qemu.yml b/tests/lcitool/projects/qemu.yml
index de51a2f1dd..958868a6ee 100644
--- a/tests/lcitool/projects/qemu.yml
+++ b/tests/lcitool/projects/qemu.yml
@@ -43,6 +43,7 @@ packages:
- libfdt
- libffi
- libgcrypt
+ - libibumad
- libibverbs
- libiscsi
- libjemalloc
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (10 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 11/22] tests/lcitool: Install libibumad to cover RDMA on Debian based distros Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-25 8:17 ` Thomas Huth
2022-02-01 15:00 ` Aaron Lindsay via
2022-01-24 20:15 ` [PATCH v1 13/22] docs: remove references to TCG tracing Alex Bennée
` (9 subsequent siblings)
21 siblings, 2 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, aaron, robhenry, mahmoudabdalghany, minyihh, cota,
Luke.Craig, Alexandre Iooss, kuhn.chenqun, ma.mandourr,
Alex Bennée, open list:ARM TCG CPUs
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
---
[AJB] this was for testing, I think you can show the same stuff with
the much more complete execlog now.
---
contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
contrib/plugins/Makefile | 1 +
tests/tcg/aarch64/Makefile.target | 3 ++
4 files changed, 82 insertions(+)
create mode 100644 contrib/plugins/stxp-plugin.c
create mode 100644 tests/tcg/aarch64/stxp.c
diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
new file mode 100644
index 0000000000..432cf8c1ed
--- /dev/null
+++ b/contrib/plugins/stxp-plugin.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <qemu-plugin.h>
+
+QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
+
+void qemu_logf(const char *str, ...)
+{
+ char message[1024];
+ va_list args;
+ va_start(args, str);
+ vsnprintf(message, 1023, str, args);
+
+ qemu_plugin_outs(message);
+
+ va_end(args);
+}
+
+void before_insn_cb(unsigned int cpu_index, void *udata)
+{
+ uint64_t pc = (uint64_t)udata;
+ qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
+}
+
+static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
+{
+ uint64_t pc = (uint64_t)udata;
+ qemu_logf("PC 0x%" PRIx64 " accessed memory at 0x%" PRIx64 "\n", pc, va);
+}
+
+static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
+{
+ size_t n = qemu_plugin_tb_n_insns(tb);
+
+ for (size_t i = 0; i < n; i++) {
+ struct qemu_plugin_insn *insn = qemu_plugin_tb_get_insn(tb, i);
+ uint64_t pc = qemu_plugin_insn_vaddr(insn);
+
+ qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb, QEMU_PLUGIN_CB_R_REGS, (void *)pc);
+ qemu_plugin_register_vcpu_mem_cb(insn, mem_cb, QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
+ }
+}
+
+QEMU_PLUGIN_EXPORT
+int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
+ int argc, char **argv)
+{
+ qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
+ return 0;
+}
diff --git a/tests/tcg/aarch64/stxp.c b/tests/tcg/aarch64/stxp.c
new file mode 100644
index 0000000000..fb8ef6a46d
--- /dev/null
+++ b/tests/tcg/aarch64/stxp.c
@@ -0,0 +1,28 @@
+
+
+void stxp_issue_demo(void *arr)
+{
+ asm(".align 8\n\t"
+ " mov x0, %[in]\n\t"
+ " mov x18, 0x1000\n\t"
+ " mov x2, 0x0\n\t"
+ " mov x3, 0x0\n\t"
+ "loop:\n\t"
+ " prfm pstl1strm, [x0]\n\t"
+ " ldxp x16, x17, [x0]\n\t"
+ " stxp w16, x2, x3, [x0]\n\t"
+ "\n\t"
+ " subs x18, x18, 1\n\t"
+ " beq done\n\t"
+ " b loop\n\t"
+ "done:\n\t"
+ : /* none out */
+ : [in] "r" (arr) /* in */
+ : "x0", "x2", "x3", "x16", "x17", "x18"); /* clobbers */
+}
+
+int main()
+{
+ char arr[16];
+ stxp_issue_demo(&arr);
+}
diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
index 54ac5ccd9f..576ed5875a 100644
--- a/contrib/plugins/Makefile
+++ b/contrib/plugins/Makefile
@@ -20,6 +20,7 @@ NAMES += howvec
NAMES += lockstep
NAMES += hwprofile
NAMES += cache
+NAMES += stxp-plugin
SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index 1d967901bd..54b2e90d00 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -72,4 +72,7 @@ endif
endif
+# Load/Store exclusive test
+AARCH64_TESTS += stxp
+
TESTS += $(AARCH64_TESTS)
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 13/22] docs: remove references to TCG tracing
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (11 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
@ 2022-01-24 20:15 ` Alex Bennée
2022-01-24 20:16 ` [PATCH v1 14/22] tracing: remove TCG memory access tracing Alex Bennée
` (8 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:15 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Hajnoczi, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr, Alex Bennée
Users wanting this sort of functionality should turn to TCG plugins
instead.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Luis Vilanova <vilanova@imperial.ac.uk>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
---
docs/about/removed-features.rst | 13 +++++
docs/devel/tracing.rst | 85 ---------------------------------
2 files changed, 13 insertions(+), 85 deletions(-)
diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst
index 4c4da20d0f..b0156e0f25 100644
--- a/docs/about/removed-features.rst
+++ b/docs/about/removed-features.rst
@@ -601,6 +601,19 @@ the upstream Linux kernel in 2018, and it has also been dropped from glibc, so
there is no new Linux development taking place with this architecture. For
running the old binaries, you can use older versions of QEMU.
+TCG introspection features
+--------------------------
+
+TCG trace-events (since 6.2)
+''''''''''''''''''''''''''''
+
+The ability to add new TCG trace points had bit rotted and as the
+feature can be replicated with TCG plugins it was removed. If
+any user is currently using this feature and needs help with
+converting to using TCG plugins they should contact the qemu-devel
+mailing list.
+
+
System emulator devices
-----------------------
diff --git a/docs/devel/tracing.rst b/docs/devel/tracing.rst
index ba83954899..ef67bc9d70 100644
--- a/docs/devel/tracing.rst
+++ b/docs/devel/tracing.rst
@@ -411,88 +411,3 @@ disabled, this check will have no performance impact.
return ptr;
}
-"tcg"
------
-
-Guest code generated by TCG can be traced by defining an event with the "tcg"
-event property. Internally, this property generates two events:
-"<eventname>_trans" to trace the event at translation time, and
-"<eventname>_exec" to trace the event at execution time.
-
-Instead of using these two events, you should instead use the function
-"trace_<eventname>_tcg" during translation (TCG code generation). This function
-will automatically call "trace_<eventname>_trans", and will generate the
-necessary TCG code to call "trace_<eventname>_exec" during guest code execution.
-
-Events with the "tcg" property can be declared in the "trace-events" file with a
-mix of native and TCG types, and "trace_<eventname>_tcg" will gracefully forward
-them to the "<eventname>_trans" and "<eventname>_exec" events. Since TCG values
-are not known at translation time, these are ignored by the "<eventname>_trans"
-event. Because of this, the entry in the "trace-events" file needs two printing
-formats (separated by a comma)::
-
- tcg foo(uint8_t a1, TCGv_i32 a2) "a1=%d", "a1=%d a2=%d"
-
-For example::
-
- #include "trace-tcg.h"
-
- void some_disassembly_func (...)
- {
- uint8_t a1 = ...;
- TCGv_i32 a2 = ...;
- trace_foo_tcg(a1, a2);
- }
-
-This will immediately call::
-
- void trace_foo_trans(uint8_t a1);
-
-and will generate the TCG code to call::
-
- void trace_foo(uint8_t a1, uint32_t a2);
-
-"vcpu"
-------
-
-Identifies events that trace vCPU-specific information. It implicitly adds a
-"CPUState*" argument, and extends the tracing print format to show the vCPU
-information. If used together with the "tcg" property, it adds a second
-"TCGv_env" argument that must point to the per-target global TCG register that
-points to the vCPU when guest code is executed (usually the "cpu_env" variable).
-
-The "tcg" and "vcpu" properties are currently only honored in the root
-./trace-events file.
-
-The following example events::
-
- foo(uint32_t a) "a=%x"
- vcpu bar(uint32_t a) "a=%x"
- tcg vcpu baz(uint32_t a) "a=%x", "a=%x"
-
-Can be used as::
-
- #include "trace-tcg.h"
-
- CPUArchState *env;
- TCGv_ptr cpu_env;
-
- void some_disassembly_func(...)
- {
- /* trace emitted at this point */
- trace_foo(0xd1);
- /* trace emitted at this point */
- trace_bar(env_cpu(env), 0xd2);
- /* trace emitted at this point (env) and when guest code is executed (cpu_env) */
- trace_baz_tcg(env_cpu(env), cpu_env, 0xd3);
- }
-
-If the translating vCPU has address 0xc1 and code is later executed by vCPU
-0xc2, this would be an example output::
-
- // at guest code translation
- foo a=0xd1
- bar cpu=0xc1 a=0xd2
- baz_trans cpu=0xc1 a=0xd3
- // at guest code execution
- baz_exec cpu=0xc2 a=0xd3
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 14/22] tracing: remove TCG memory access tracing
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (12 preceding siblings ...)
2022-01-24 20:15 ` [PATCH v1 13/22] docs: remove references to TCG tracing Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 22:06 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build Alex Bennée
` (7 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Hajnoczi, Riku Voipio, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Paolo Bonzini, kuhn.chenqun, ma.mandourr, Alex Bennée
If you really want to trace all memory operations TCG plugins gives
you a more flexible interface for doing so.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Luis Vilanova <vilanova@imperial.ac.uk>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
--
v2
- dropped extra line
---
accel/tcg/atomic_template.h | 12 ------------
accel/tcg/cputlb.c | 2 --
accel/tcg/user-exec.c | 14 --------------
tcg/tcg-op.c | 5 -----
accel/tcg/atomic_common.c.inc | 20 --------------------
trace-events | 14 --------------
6 files changed, 67 deletions(-)
diff --git a/accel/tcg/atomic_template.h b/accel/tcg/atomic_template.h
index 2d917b6b1f..fc165031e8 100644
--- a/accel/tcg/atomic_template.h
+++ b/accel/tcg/atomic_template.h
@@ -77,7 +77,6 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
PAGE_READ | PAGE_WRITE, retaddr);
DATA_TYPE ret;
- atomic_trace_rmw_pre(env, addr, oi);
#if DATA_SIZE == 16
ret = atomic16_cmpxchg(haddr, cmpv, newv);
#else
@@ -97,7 +96,6 @@ ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr,
PAGE_READ, retaddr);
DATA_TYPE val;
- atomic_trace_ld_pre(env, addr, oi);
val = atomic16_read(haddr);
ATOMIC_MMU_CLEANUP;
atomic_trace_ld_post(env, addr, oi);
@@ -110,7 +108,6 @@ void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
PAGE_WRITE, retaddr);
- atomic_trace_st_pre(env, addr, oi);
atomic16_set(haddr, val);
ATOMIC_MMU_CLEANUP;
atomic_trace_st_post(env, addr, oi);
@@ -124,7 +121,6 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
PAGE_READ | PAGE_WRITE, retaddr);
DATA_TYPE ret;
- atomic_trace_rmw_pre(env, addr, oi);
ret = qatomic_xchg__nocheck(haddr, val);
ATOMIC_MMU_CLEANUP;
atomic_trace_rmw_post(env, addr, oi);
@@ -138,7 +134,6 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
PAGE_READ | PAGE_WRITE, retaddr); \
DATA_TYPE ret; \
- atomic_trace_rmw_pre(env, addr, oi); \
ret = qatomic_##X(haddr, val); \
ATOMIC_MMU_CLEANUP; \
atomic_trace_rmw_post(env, addr, oi); \
@@ -171,7 +166,6 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
XDATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
PAGE_READ | PAGE_WRITE, retaddr); \
XDATA_TYPE cmp, old, new, val = xval; \
- atomic_trace_rmw_pre(env, addr, oi); \
smp_mb(); \
cmp = qatomic_read__nocheck(haddr); \
do { \
@@ -216,7 +210,6 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr,
PAGE_READ | PAGE_WRITE, retaddr);
DATA_TYPE ret;
- atomic_trace_rmw_pre(env, addr, oi);
#if DATA_SIZE == 16
ret = atomic16_cmpxchg(haddr, BSWAP(cmpv), BSWAP(newv));
#else
@@ -236,7 +229,6 @@ ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr,
PAGE_READ, retaddr);
DATA_TYPE val;
- atomic_trace_ld_pre(env, addr, oi);
val = atomic16_read(haddr);
ATOMIC_MMU_CLEANUP;
atomic_trace_ld_post(env, addr, oi);
@@ -249,7 +241,6 @@ void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE,
PAGE_WRITE, retaddr);
- atomic_trace_st_pre(env, addr, oi);
val = BSWAP(val);
atomic16_set(haddr, val);
ATOMIC_MMU_CLEANUP;
@@ -264,7 +255,6 @@ ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val,
PAGE_READ | PAGE_WRITE, retaddr);
ABI_TYPE ret;
- atomic_trace_rmw_pre(env, addr, oi);
ret = qatomic_xchg__nocheck(haddr, BSWAP(val));
ATOMIC_MMU_CLEANUP;
atomic_trace_rmw_post(env, addr, oi);
@@ -278,7 +268,6 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
DATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
PAGE_READ | PAGE_WRITE, retaddr); \
DATA_TYPE ret; \
- atomic_trace_rmw_pre(env, addr, oi); \
ret = qatomic_##X(haddr, BSWAP(val)); \
ATOMIC_MMU_CLEANUP; \
atomic_trace_rmw_post(env, addr, oi); \
@@ -308,7 +297,6 @@ ABI_TYPE ATOMIC_NAME(X)(CPUArchState *env, target_ulong addr, \
XDATA_TYPE *haddr = atomic_mmu_lookup(env, addr, oi, DATA_SIZE, \
PAGE_READ | PAGE_WRITE, retaddr); \
XDATA_TYPE ldo, ldn, old, new, val = xval; \
- atomic_trace_rmw_pre(env, addr, oi); \
smp_mb(); \
ldn = qatomic_read__nocheck(haddr); \
do { \
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index 5e0d0eebc3..82adefe574 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -2140,7 +2140,6 @@ static inline uint64_t cpu_load_helper(CPUArchState *env, abi_ptr addr,
{
uint64_t ret;
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
ret = full_load(env, addr, oi, retaddr);
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
return ret;
@@ -2487,7 +2486,6 @@ static inline void cpu_store_helper(CPUArchState *env, target_ulong addr,
uint64_t val, MemOpIdx oi, uintptr_t ra,
FullStoreHelper *full_store)
{
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
full_store(env, addr, val, oi, ra);
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_W);
}
diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c
index 6f5d4933f0..8edf0bbaa1 100644
--- a/accel/tcg/user-exec.c
+++ b/accel/tcg/user-exec.c
@@ -250,7 +250,6 @@ uint8_t cpu_ldb_mmu(CPUArchState *env, abi_ptr addr,
uint8_t ret;
validate_memop(oi, MO_UB);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = ldub_p(haddr);
clear_helper_retaddr();
@@ -265,7 +264,6 @@ uint16_t cpu_ldw_be_mmu(CPUArchState *env, abi_ptr addr,
uint16_t ret;
validate_memop(oi, MO_BEUW);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = lduw_be_p(haddr);
clear_helper_retaddr();
@@ -280,7 +278,6 @@ uint32_t cpu_ldl_be_mmu(CPUArchState *env, abi_ptr addr,
uint32_t ret;
validate_memop(oi, MO_BEUL);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = ldl_be_p(haddr);
clear_helper_retaddr();
@@ -295,7 +292,6 @@ uint64_t cpu_ldq_be_mmu(CPUArchState *env, abi_ptr addr,
uint64_t ret;
validate_memop(oi, MO_BEUQ);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = ldq_be_p(haddr);
clear_helper_retaddr();
@@ -310,7 +306,6 @@ uint16_t cpu_ldw_le_mmu(CPUArchState *env, abi_ptr addr,
uint16_t ret;
validate_memop(oi, MO_LEUW);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = lduw_le_p(haddr);
clear_helper_retaddr();
@@ -325,7 +320,6 @@ uint32_t cpu_ldl_le_mmu(CPUArchState *env, abi_ptr addr,
uint32_t ret;
validate_memop(oi, MO_LEUL);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = ldl_le_p(haddr);
clear_helper_retaddr();
@@ -340,7 +334,6 @@ uint64_t cpu_ldq_le_mmu(CPUArchState *env, abi_ptr addr,
uint64_t ret;
validate_memop(oi, MO_LEUQ);
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_LOAD);
ret = ldq_le_p(haddr);
clear_helper_retaddr();
@@ -354,7 +347,6 @@ void cpu_stb_mmu(CPUArchState *env, abi_ptr addr, uint8_t val,
void *haddr;
validate_memop(oi, MO_UB);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stb_p(haddr, val);
clear_helper_retaddr();
@@ -367,7 +359,6 @@ void cpu_stw_be_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
void *haddr;
validate_memop(oi, MO_BEUW);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stw_be_p(haddr, val);
clear_helper_retaddr();
@@ -380,7 +371,6 @@ void cpu_stl_be_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
void *haddr;
validate_memop(oi, MO_BEUL);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stl_be_p(haddr, val);
clear_helper_retaddr();
@@ -393,7 +383,6 @@ void cpu_stq_be_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
void *haddr;
validate_memop(oi, MO_BEUQ);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stq_be_p(haddr, val);
clear_helper_retaddr();
@@ -406,7 +395,6 @@ void cpu_stw_le_mmu(CPUArchState *env, abi_ptr addr, uint16_t val,
void *haddr;
validate_memop(oi, MO_LEUW);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stw_le_p(haddr, val);
clear_helper_retaddr();
@@ -419,7 +407,6 @@ void cpu_stl_le_mmu(CPUArchState *env, abi_ptr addr, uint32_t val,
void *haddr;
validate_memop(oi, MO_LEUL);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stl_le_p(haddr, val);
clear_helper_retaddr();
@@ -432,7 +419,6 @@ void cpu_stq_le_mmu(CPUArchState *env, abi_ptr addr, uint64_t val,
void *haddr;
validate_memop(oi, MO_LEUQ);
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
haddr = cpu_mmu_lookup(env, addr, oi, ra, MMU_DATA_STORE);
stq_le_p(haddr, val);
clear_helper_retaddr();
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
index 61b492d89f..65e1c94c2d 100644
--- a/tcg/tcg-op.c
+++ b/tcg/tcg-op.c
@@ -27,7 +27,6 @@
#include "tcg/tcg.h"
#include "tcg/tcg-op.h"
#include "tcg/tcg-mo.h"
-#include "trace-tcg.h"
#include "exec/plugin-gen.h"
/* Reduce the number of ifdefs below. This assumes that all uses of
@@ -2877,7 +2876,6 @@ void tcg_gen_qemu_ld_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
memop = tcg_canonicalize_memop(memop, 0, 0);
oi = make_memop_idx(memop, idx);
- trace_guest_ld_before_tcg(tcg_ctx->cpu, cpu_env, addr, oi);
orig_memop = memop;
if (!TCG_TARGET_HAS_MEMORY_BSWAP && (memop & MO_BSWAP)) {
@@ -2916,7 +2914,6 @@ void tcg_gen_qemu_st_i32(TCGv_i32 val, TCGv addr, TCGArg idx, MemOp memop)
tcg_gen_req_mo(TCG_MO_LD_ST | TCG_MO_ST_ST);
memop = tcg_canonicalize_memop(memop, 0, 1);
oi = make_memop_idx(memop, idx);
- trace_guest_st_before_tcg(tcg_ctx->cpu, cpu_env, addr, oi);
if (!TCG_TARGET_HAS_MEMORY_BSWAP && (memop & MO_BSWAP)) {
swap = tcg_temp_new_i32();
@@ -2965,7 +2962,6 @@ void tcg_gen_qemu_ld_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
memop = tcg_canonicalize_memop(memop, 1, 0);
oi = make_memop_idx(memop, idx);
- trace_guest_ld_before_tcg(tcg_ctx->cpu, cpu_env, addr, oi);
orig_memop = memop;
if (!TCG_TARGET_HAS_MEMORY_BSWAP && (memop & MO_BSWAP)) {
@@ -3013,7 +3009,6 @@ void tcg_gen_qemu_st_i64(TCGv_i64 val, TCGv addr, TCGArg idx, MemOp memop)
tcg_gen_req_mo(TCG_MO_LD_ST | TCG_MO_ST_ST);
memop = tcg_canonicalize_memop(memop, 1, 1);
oi = make_memop_idx(memop, idx);
- trace_guest_st_before_tcg(tcg_ctx->cpu, cpu_env, addr, oi);
if (!TCG_TARGET_HAS_MEMORY_BSWAP && (memop & MO_BSWAP)) {
swap = tcg_temp_new_i64();
diff --git a/accel/tcg/atomic_common.c.inc b/accel/tcg/atomic_common.c.inc
index 1df1f243e9..6602d7689f 100644
--- a/accel/tcg/atomic_common.c.inc
+++ b/accel/tcg/atomic_common.c.inc
@@ -13,14 +13,6 @@
* See the COPYING file in the top-level directory.
*/
-static void atomic_trace_rmw_pre(CPUArchState *env, target_ulong addr,
- MemOpIdx oi)
-{
- CPUState *cpu = env_cpu(env);
-
- trace_guest_rmw_before_exec(cpu, addr, oi);
-}
-
static void atomic_trace_rmw_post(CPUArchState *env, target_ulong addr,
MemOpIdx oi)
{
@@ -28,24 +20,12 @@ static void atomic_trace_rmw_post(CPUArchState *env, target_ulong addr,
}
#if HAVE_ATOMIC128
-static void atomic_trace_ld_pre(CPUArchState *env, target_ulong addr,
- MemOpIdx oi)
-{
- trace_guest_ld_before_exec(env_cpu(env), addr, oi);
-}
-
static void atomic_trace_ld_post(CPUArchState *env, target_ulong addr,
MemOpIdx oi)
{
qemu_plugin_vcpu_mem_cb(env_cpu(env), addr, oi, QEMU_PLUGIN_MEM_R);
}
-static void atomic_trace_st_pre(CPUArchState *env, target_ulong addr,
- MemOpIdx oi)
-{
- trace_guest_st_before_exec(env_cpu(env), addr, oi);
-}
-
static void atomic_trace_st_post(CPUArchState *env, target_ulong addr,
MemOpIdx oi)
{
diff --git a/trace-events b/trace-events
index a637a61eba..bc71006675 100644
--- a/trace-events
+++ b/trace-events
@@ -117,20 +117,6 @@ vcpu guest_cpu_exit(void)
# Targets: all
vcpu guest_cpu_reset(void)
-# tcg/tcg-op.c
-
-# @vaddr: Access' virtual address.
-# @memopidx: Access' information (see below).
-#
-# Start virtual memory access (before any potential access violation).
-# Does not include memory accesses performed by devices.
-#
-# Mode: user, softmmu
-# Targets: TCG(all)
-vcpu tcg guest_ld_before(TCGv vaddr, uint32_t memopidx) "info=%d", "vaddr=0x%016"PRIx64" memopidx=0x%x"
-vcpu tcg guest_st_before(TCGv vaddr, uint32_t memopidx) "info=%d", "vaddr=0x%016"PRIx64" memopidx=0x%x"
-vcpu tcg guest_rmw_before(TCGv vaddr, uint32_t memopidx) "info=%d", "vaddr=0x%016"PRIx64" memopidx=0x%x"
-
# include/user/syscall-trace.h
# @num: System call number.
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (13 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 14/22] tracing: remove TCG memory access tracing Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 22:07 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 16/22] tracing: excise the tcg related from tracetool Alex Bennée
` (6 subsequent siblings)
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Hajnoczi, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Paolo Bonzini, kuhn.chenqun, ma.mandourr, Alex Bennée
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Luis Vilanova <vilanova@imperial.ac.uk>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
---
v2
- dropped includes here instead of next patch
---
include/exec/helper-proto.h | 1 -
include/exec/helper-tcg.h | 1 -
include/trace-tcg.h | 6 ------
trace/meson.build | 1 -
4 files changed, 9 deletions(-)
delete mode 100644 include/trace-tcg.h
diff --git a/include/exec/helper-proto.h b/include/exec/helper-proto.h
index ba100793a7..c4b1bda632 100644
--- a/include/exec/helper-proto.h
+++ b/include/exec/helper-proto.h
@@ -38,7 +38,6 @@ dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
#define IN_HELPER_PROTO
#include "helper.h"
-#include "trace/generated-helpers.h"
#include "accel/tcg/tcg-runtime.h"
#include "accel/tcg/plugin-helpers.h"
diff --git a/include/exec/helper-tcg.h b/include/exec/helper-tcg.h
index 16cd318b83..3933258f1a 100644
--- a/include/exec/helper-tcg.h
+++ b/include/exec/helper-tcg.h
@@ -59,7 +59,6 @@
| dh_typemask(t5, 5) | dh_typemask(t6, 6) | dh_typemask(t7, 7) },
#include "helper.h"
-#include "trace/generated-helpers.h"
#include "accel/tcg/tcg-runtime.h"
#include "accel/tcg/plugin-helpers.h"
diff --git a/include/trace-tcg.h b/include/trace-tcg.h
deleted file mode 100644
index da68608c85..0000000000
--- a/include/trace-tcg.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TRACE_TCG_H
-#define TRACE_TCG_H
-
-#include "trace/generated-tcg-tracers.h"
-
-#endif /* TRACE_TCG_H */
diff --git a/trace/meson.build b/trace/meson.build
index 573dd699c6..e279e33d4d 100644
--- a/trace/meson.build
+++ b/trace/meson.build
@@ -62,7 +62,6 @@ trace_events_all = custom_target('trace-events-all',
install_dir: qemu_datadir)
foreach d : [
- ['generated-tcg-tracers.h', 'tcg-h'],
['generated-helpers.c', 'tcg-helper-c'],
['generated-helpers.h', 'tcg-helper-h'],
['generated-helpers-wrappers.h', 'tcg-helper-wrapper-h'],
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 16/22] tracing: excise the tcg related from tracetool
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (14 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 20:16 ` [PATCH v1 17/22] plugins: add helper functions for coverage plugins Alex Bennée
` (5 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Stefan Hajnoczi, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Paolo Bonzini, kuhn.chenqun, ma.mandourr, Alex Bennée
Now we have no TCG trace events and no longer handle them in the code
we can remove the handling from the tracetool to generate them. vcpu
tracing is still available although the existing syscall event is an
exercise in redundancy (plugins and -strace can also get the
information).
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Luis Vilanova <vilanova@imperial.ac.uk>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
---
meson.build | 4 -
include/exec/helper-gen.h | 2 -
scripts/tracetool/__init__.py | 41 +--------
scripts/tracetool/format/tcg_h.py | 83 -------------------
scripts/tracetool/format/tcg_helper_c.py | 79 ------------------
scripts/tracetool/format/tcg_helper_h.py | 48 -----------
.../tracetool/format/tcg_helper_wrapper_h.py | 70 ----------------
scripts/tracetool/vcpu.py | 14 +---
trace/meson.build | 13 ---
9 files changed, 4 insertions(+), 350 deletions(-)
delete mode 100644 scripts/tracetool/format/tcg_h.py
delete mode 100644 scripts/tracetool/format/tcg_helper_c.py
delete mode 100644 scripts/tracetool/format/tcg_helper_h.py
delete mode 100644 scripts/tracetool/format/tcg_helper_wrapper_h.py
diff --git a/meson.build b/meson.build
index 51e3090438..73533f9eaa 100644
--- a/meson.build
+++ b/meson.build
@@ -2355,19 +2355,15 @@ tracetool_depends = files(
'scripts/tracetool/backend/simple.py',
'scripts/tracetool/backend/syslog.py',
'scripts/tracetool/backend/ust.py',
- 'scripts/tracetool/format/tcg_h.py',
'scripts/tracetool/format/ust_events_c.py',
'scripts/tracetool/format/ust_events_h.py',
'scripts/tracetool/format/__init__.py',
'scripts/tracetool/format/d.py',
- 'scripts/tracetool/format/tcg_helper_c.py',
'scripts/tracetool/format/simpletrace_stap.py',
'scripts/tracetool/format/c.py',
'scripts/tracetool/format/h.py',
- 'scripts/tracetool/format/tcg_helper_h.py',
'scripts/tracetool/format/log_stap.py',
'scripts/tracetool/format/stap.py',
- 'scripts/tracetool/format/tcg_helper_wrapper_h.py',
'scripts/tracetool/__init__.py',
'scripts/tracetool/transform.py',
'scripts/tracetool/vcpu.py'
diff --git a/include/exec/helper-gen.h b/include/exec/helper-gen.h
index 1c2e7a8ed3..7b6ca975ef 100644
--- a/include/exec/helper-gen.h
+++ b/include/exec/helper-gen.h
@@ -79,8 +79,6 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
}
#include "helper.h"
-#include "trace/generated-helpers.h"
-#include "trace/generated-helpers-wrappers.h"
#include "accel/tcg/tcg-runtime.h"
#include "accel/tcg/plugin-helpers.h"
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 5bc94d95cf..5393c7fc5c 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -87,8 +87,6 @@ def out(*lines, **kwargs):
"ssize_t",
"uintptr_t",
"ptrdiff_t",
- # Magic substitution is done by tracetool
- "TCGv",
]
def validate_type(name):
@@ -232,7 +230,7 @@ class Event(object):
"(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
"\s*")
- _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
+ _VALID_PROPS = set(["disable", "vcpu"])
def __init__(self, name, props, fmt, args, lineno, filename, orig=None,
event_trans=None, event_exec=None):
@@ -321,15 +319,6 @@ def build(line_str, lineno, filename):
fmt = [fmt_trans, fmt]
args = Arguments.build(groups["args"])
- if "tcg-trans" in props:
- raise ValueError("Invalid property 'tcg-trans'")
- if "tcg-exec" in props:
- raise ValueError("Invalid property 'tcg-exec'")
- if "tcg" not in props and not isinstance(fmt, str):
- raise ValueError("Only events with 'tcg' property can have two format strings")
- if "tcg" in props and isinstance(fmt, str):
- raise ValueError("Events with 'tcg' property must have two format strings")
-
event = Event(name, props, fmt, args, lineno, filename)
# add implicit arguments when using the 'vcpu' property
@@ -409,33 +398,7 @@ def read_events(fobj, fname):
e.args = (arg0,) + e.args[1:]
raise
- # transform TCG-enabled events
- if "tcg" not in event.properties:
- events.append(event)
- else:
- event_trans = event.copy()
- event_trans.name += "_trans"
- event_trans.properties += ["tcg-trans"]
- event_trans.fmt = event.fmt[0]
- # ignore TCG arguments
- args_trans = []
- for atrans, aorig in zip(
- event_trans.transform(tracetool.transform.TCG_2_HOST).args,
- event.args):
- if atrans == aorig:
- args_trans.append(atrans)
- event_trans.args = Arguments(args_trans)
-
- event_exec = event.copy()
- event_exec.name += "_exec"
- event_exec.properties += ["tcg-exec"]
- event_exec.fmt = event.fmt[1]
- event_exec.args = event_exec.args.transform(tracetool.transform.TCG_2_HOST)
-
- new_event = [event_trans, event_exec]
- event.event_trans, event.event_exec = new_event
-
- events.extend(new_event)
+ events.append(event)
return events
diff --git a/scripts/tracetool/format/tcg_h.py b/scripts/tracetool/format/tcg_h.py
deleted file mode 100644
index 4d84440aff..0000000000
--- a/scripts/tracetool/format/tcg_h.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Generate .h file for TCG code generation.
-"""
-
-__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
-__copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
-__license__ = "GPL version 2 or (at your option) any later version"
-
-__maintainer__ = "Stefan Hajnoczi"
-__email__ = "stefanha@redhat.com"
-
-
-from tracetool import out, Arguments
-import tracetool.vcpu
-
-
-def vcpu_transform_args(args):
- assert len(args) == 1
- return Arguments([
- args,
- # NOTE: this name must be kept in sync with the one in "tcg_h"
- # NOTE: Current helper code uses TCGv_env (CPUArchState*)
- ("TCGv_env", "__tcg_" + args.names()[0]),
- ])
-
-
-def generate(events, backend, group):
- if group == "root":
- header = "trace/trace-root.h"
- else:
- header = "trace.h"
-
- out('/* This file is autogenerated by tracetool, do not edit. */',
- '/* You must include this file after the inclusion of helper.h */',
- '',
- '#ifndef TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
- '#define TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(),
- '',
- '#include "exec/helper-proto.h"',
- '#include "%s"' % header,
- '',
- )
-
- for e in events:
- # just keep one of them
- if "tcg-exec" not in e.properties:
- continue
-
- out('static inline void %(name_tcg)s(%(args)s)',
- '{',
- name_tcg=e.original.api(e.QEMU_TRACE_TCG),
- args=tracetool.vcpu.transform_args("tcg_h", e.original))
-
- if "disable" not in e.properties:
- args_trans = e.original.event_trans.args
- args_exec = tracetool.vcpu.transform_args(
- "tcg_helper_c", e.original.event_exec, "wrapper")
- if "vcpu" in e.properties:
- trace_cpu = e.args.names()[0]
- cond = "trace_event_get_vcpu_state(%(cpu)s,"\
- " TRACE_%(id)s)"\
- % dict(
- cpu=trace_cpu,
- id=e.original.event_exec.name.upper())
- else:
- cond = "true"
-
- out(' %(name_trans)s(%(argnames_trans)s);',
- ' if (%(cond)s) {',
- ' gen_helper_%(name_exec)s(%(argnames_exec)s);',
- ' }',
- name_trans=e.original.event_trans.api(e.QEMU_TRACE),
- name_exec=e.original.event_exec.api(e.QEMU_TRACE),
- argnames_trans=", ".join(args_trans.names()),
- argnames_exec=", ".join(args_exec.names()),
- cond=cond)
-
- out('}')
-
- out('',
- '#endif /* TRACE_%s_GENERATED_TCG_TRACERS_H */' % group.upper())
diff --git a/scripts/tracetool/format/tcg_helper_c.py b/scripts/tracetool/format/tcg_helper_c.py
deleted file mode 100644
index 72576e67d1..0000000000
--- a/scripts/tracetool/format/tcg_helper_c.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Generate trace/generated-helpers.c.
-"""
-
-__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
-__copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
-__license__ = "GPL version 2 or (at your option) any later version"
-
-__maintainer__ = "Stefan Hajnoczi"
-__email__ = "stefanha@redhat.com"
-
-
-from tracetool import Arguments, out
-from tracetool.transform import *
-import tracetool.vcpu
-
-
-def vcpu_transform_args(args, mode):
- assert len(args) == 1
- # NOTE: this name must be kept in sync with the one in "tcg_h"
- args = Arguments([(args.types()[0], "__tcg_" + args.names()[0])])
- if mode == "code":
- return Arguments([
- # Does cast from helper requirements to tracing types
- ("CPUState *", "env_cpu(%s)" % args.names()[0]),
- ])
- else:
- args = Arguments([
- # NOTE: Current helper code uses TCGv_env (CPUArchState*)
- ("CPUArchState *", args.names()[0]),
- ])
- if mode == "header":
- return args
- elif mode == "wrapper":
- return args.transform(HOST_2_TCG)
- else:
- assert False
-
-
-def generate(events, backend, group):
- if group == "root":
- header = "trace/trace-root.h"
- else:
- header = "trace.h"
-
- events = [e for e in events
- if "disable" not in e.properties]
-
- out('/* This file is autogenerated by tracetool, do not edit. */',
- '',
- '#include "qemu/osdep.h"',
- '#include "cpu.h"',
- '#include "exec/helper-proto.h"',
- '#include "%s"' % header,
- '',
- )
-
- for e in events:
- if "tcg-exec" not in e.properties:
- continue
-
- e_args_api = tracetool.vcpu.transform_args(
- "tcg_helper_c", e.original, "header").transform(
- HOST_2_TCG_COMPAT, TCG_2_TCG_HELPER_DEF)
- e_args_call = tracetool.vcpu.transform_args(
- "tcg_helper_c", e, "code")
-
- out('void %(name_tcg)s(%(args_api)s)',
- '{',
- # NOTE: the check was already performed at TCG-generation time
- ' %(name)s(%(args_call)s);',
- '}',
- name_tcg="helper_%s_proxy" % e.api(),
- name=e.api(e.QEMU_TRACE_NOCHECK),
- args_api=e_args_api,
- args_call=", ".join(e_args_call.casted()),
- )
diff --git a/scripts/tracetool/format/tcg_helper_h.py b/scripts/tracetool/format/tcg_helper_h.py
deleted file mode 100644
index 08554fbc85..0000000000
--- a/scripts/tracetool/format/tcg_helper_h.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Generate trace/generated-helpers.h.
-"""
-
-__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
-__copyright__ = "Copyright 2012-2016, Lluís Vilanova <vilanova@ac.upc.edu>"
-__license__ = "GPL version 2 or (at your option) any later version"
-
-__maintainer__ = "Stefan Hajnoczi"
-__email__ = "stefanha@redhat.com"
-
-
-from tracetool import out
-from tracetool.transform import *
-import tracetool.vcpu
-
-
-def generate(events, backend, group):
- events = [e for e in events
- if "disable" not in e.properties]
-
- out('/* This file is autogenerated by tracetool, do not edit. */',
- '',
- )
-
- for e in events:
- if "tcg-exec" not in e.properties:
- continue
-
- # TCG helper proxy declaration
- fmt = "DEF_HELPER_FLAGS_%(argc)d(%(name)s, %(flags)svoid%(types)s)"
- e_args = tracetool.vcpu.transform_args("tcg_helper_c", e.original, "header")
- args = e_args.transform(HOST_2_TCG_COMPAT, HOST_2_TCG,
- TCG_2_TCG_HELPER_DECL)
- types = ", ".join(args.types())
- if types != "":
- types = ", " + types
-
- flags = "TCG_CALL_NO_RWG, "
-
- out(fmt,
- flags=flags,
- argc=len(args),
- name=e.api() + "_proxy",
- types=types,
- )
diff --git a/scripts/tracetool/format/tcg_helper_wrapper_h.py b/scripts/tracetool/format/tcg_helper_wrapper_h.py
deleted file mode 100644
index 0c5a9797d1..0000000000
--- a/scripts/tracetool/format/tcg_helper_wrapper_h.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-Generate trace/generated-helpers-wrappers.h.
-"""
-
-__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
-__copyright__ = "Copyright 2012-2016, Lluís Vilanova <vilanova@ac.upc.edu>"
-__license__ = "GPL version 2 or (at your option) any later version"
-
-__maintainer__ = "Stefan Hajnoczi"
-__email__ = "stefanha@redhat.com"
-
-
-from tracetool import out
-from tracetool.transform import *
-import tracetool.vcpu
-
-
-def generate(events, backend, group):
- events = [e for e in events
- if "disable" not in e.properties]
-
- out('/* This file is autogenerated by tracetool, do not edit. */',
- '',
- '#define tcg_temp_new_nop(v) (v)',
- '#define tcg_temp_free_nop(v)',
- '',
- )
-
- for e in events:
- if "tcg-exec" not in e.properties:
- continue
-
- # tracetool.generate always transforms types to host
- e_args = tracetool.vcpu.transform_args("tcg_helper_c", e.original, "wrapper")
-
- # mixed-type to TCG helper bridge
- args_tcg_compat = e_args.transform(HOST_2_TCG_COMPAT)
-
- code_new = [
- "%(tcg_type)s __%(name)s = %(tcg_func)s(%(name)s);" %
- {"tcg_type": transform_type(type_, HOST_2_TCG),
- "tcg_func": transform_type(type_, HOST_2_TCG_TMP_NEW),
- "name": name}
- for (type_, name) in args_tcg_compat
- ]
-
- code_free = [
- "%(tcg_func)s(__%(name)s);" %
- {"tcg_func": transform_type(type_, HOST_2_TCG_TMP_FREE),
- "name": name}
- for (type_, name) in args_tcg_compat
- ]
-
- gen_name = "gen_helper_" + e.api()
-
- out('static inline void %(name)s(%(args)s)',
- '{',
- ' %(code_new)s',
- ' %(proxy_name)s(%(tmp_names)s);',
- ' %(code_free)s',
- '}',
- name=gen_name,
- args=e_args,
- proxy_name=gen_name + "_proxy",
- code_new="\n ".join(code_new),
- code_free="\n ".join(code_free),
- tmp_names=", ".join(["__%s" % name for _, name in e_args]),
- )
diff --git a/scripts/tracetool/vcpu.py b/scripts/tracetool/vcpu.py
index 868b4cb04c..d232cb1d06 100644
--- a/scripts/tracetool/vcpu.py
+++ b/scripts/tracetool/vcpu.py
@@ -19,19 +19,9 @@
def transform_event(event):
"""Transform event to comply with the 'vcpu' property (if present)."""
if "vcpu" in event.properties:
- # events with 'tcg-trans' and 'tcg-exec' are auto-generated from
- # already-patched events
- assert "tcg-trans" not in event.properties
- assert "tcg-exec" not in event.properties
-
event.args = Arguments([("void *", "__cpu"), event.args])
- if "tcg" in event.properties:
- fmt = "\"cpu=%p \""
- event.fmt = [fmt + event.fmt[0],
- fmt + event.fmt[1]]
- else:
- fmt = "\"cpu=%p \""
- event.fmt = fmt + event.fmt
+ fmt = "\"cpu=%p \""
+ event.fmt = fmt + event.fmt
return event
diff --git a/trace/meson.build b/trace/meson.build
index e279e33d4d..298926036a 100644
--- a/trace/meson.build
+++ b/trace/meson.build
@@ -61,19 +61,6 @@ trace_events_all = custom_target('trace-events-all',
install: true,
install_dir: qemu_datadir)
-foreach d : [
- ['generated-helpers.c', 'tcg-helper-c'],
- ['generated-helpers.h', 'tcg-helper-h'],
- ['generated-helpers-wrappers.h', 'tcg-helper-wrapper-h'],
-]
- gen = custom_target(d[0],
- output: d[0],
- input: meson.project_source_root() / 'trace-events',
- command: [ tracetool, '--group=root', '--format=@0@'.format(d[1]), '@INPUT@', '@OUTPUT@' ],
- depend_files: tracetool_depends)
- specific_ss.add(when: 'CONFIG_TCG', if_true: gen)
-endforeach
-
if 'ust' in get_option('trace_backends')
trace_ust_all_h = custom_target('trace-ust-all.h',
output: 'trace-ust-all.h',
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 17/22] plugins: add helper functions for coverage plugins
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (15 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 16/22] tracing: excise the tcg related from tracetool Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 20:16 ` [PATCH v1 18/22] contrib/plugins: add a drcov plugin Alex Bennée
` (4 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Iooss, aaron, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Ivanov Arkady, kuhn.chenqun, ma.mandourr,
Alex Bennée
From: Ivanov Arkady <arkadiy.ivanov@ispras.ru>
Which provide information about:
- start_code.
- end_code.
- entry.
- path to the executable binary.
Signed-off-by: Ivanov Arkady <arkadiy.ivanov@ispras.ru>
Message-Id: <163491883461.304355.8210754161847179432.stgit@pc-System-Product-Name>
[AJB: reword title, better descriptions, defaults, rm export, fix include]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
include/qemu/qemu-plugin.h | 34 ++++++++++++++++++++++++++
plugins/api.c | 46 ++++++++++++++++++++++++++++++++++++
plugins/qemu-plugins.symbols | 4 ++++
3 files changed, 84 insertions(+)
diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h
index 5f1017201f..535ddbf0ae 100644
--- a/include/qemu/qemu-plugin.h
+++ b/include/qemu/qemu-plugin.h
@@ -590,4 +590,38 @@ void qemu_plugin_outs(const char *string);
*/
bool qemu_plugin_bool_parse(const char *name, const char *val, bool *ret);
+/**
+ * qemu_plugin_path_to_binary() - path to binary file being executed
+ *
+ * Return a string representing the path to the binary. For user-mode
+ * this is the main executable. For system emulation we currently
+ * return NULL. The user should g_free() the string once no longer
+ * needed.
+ */
+const char *qemu_plugin_path_to_binary(void);
+
+/**
+ * qemu_plugin_start_code() - returns start of text segment
+ *
+ * Returns the nominal start address of the main text segment in
+ * user-mode. Currently returns 0 for system emulation.
+ */
+uint64_t qemu_plugin_start_code(void);
+
+/**
+ * qemu_plugin_end_code() - returns end of text segment
+ *
+ * Returns the nominal end address of the main text segment in
+ * user-mode. Currently returns 0 for system emulation.
+ */
+uint64_t qemu_plugin_end_code(void);
+
+/**
+ * qemu_plugin_entry_code() - returns start address for module
+ *
+ * Returns the nominal entry address of the main text segment in
+ * user-mode. Currently returns 0 for system emulation.
+ */
+uint64_t qemu_plugin_entry_code(void);
+
#endif /* QEMU_PLUGIN_API_H */
diff --git a/plugins/api.c b/plugins/api.c
index b143b09ce9..e6a2c9dde3 100644
--- a/plugins/api.c
+++ b/plugins/api.c
@@ -44,6 +44,9 @@
#ifndef CONFIG_USER_ONLY
#include "qemu/plugin-memory.h"
#include "hw/boards.h"
+#else
+#include "qemu.h"
+#include "loader.h"
#endif
/* Uninstall and Reset handlers */
@@ -391,3 +394,46 @@ bool qemu_plugin_bool_parse(const char *name, const char *value, bool *ret)
{
return name && value && qapi_bool_parse(name, value, ret, NULL);
}
+
+/*
+ * Binary path, start and end locations
+ */
+const char *qemu_plugin_path_to_binary(void)
+{
+ char *path = NULL;
+#ifdef CONFIG_USER_ONLY
+ TaskState *ts = (TaskState *) current_cpu->opaque;
+ path = g_strdup(ts->bprm->filename);
+#endif
+ return path;
+}
+
+uint64_t qemu_plugin_start_code(void)
+{
+ uint64_t start = 0;
+#ifdef CONFIG_USER_ONLY
+ TaskState *ts = (TaskState *) current_cpu->opaque;
+ start = ts->info->start_code;
+#endif
+ return start;
+}
+
+uint64_t qemu_plugin_end_code(void)
+{
+ uint64_t end = 0;
+#ifdef CONFIG_USER_ONLY
+ TaskState *ts = (TaskState *) current_cpu->opaque;
+ end = ts->info->end_code;
+#endif
+ return end;
+}
+
+uint64_t qemu_plugin_entry_code(void)
+{
+ uint64_t entry = 0;
+#ifdef CONFIG_USER_ONLY
+ TaskState *ts = (TaskState *) current_cpu->opaque;
+ entry = ts->info->entry;
+#endif
+ return entry;
+}
diff --git a/plugins/qemu-plugins.symbols b/plugins/qemu-plugins.symbols
index 4834756ba3..71f6c90549 100644
--- a/plugins/qemu-plugins.symbols
+++ b/plugins/qemu-plugins.symbols
@@ -1,5 +1,7 @@
{
qemu_plugin_bool_parse;
+ qemu_plugin_end_code;
+ qemu_plugin_entry_code;
qemu_plugin_get_hwaddr;
qemu_plugin_hwaddr_device_name;
qemu_plugin_hwaddr_is_io;
@@ -17,6 +19,7 @@
qemu_plugin_n_max_vcpus;
qemu_plugin_n_vcpus;
qemu_plugin_outs;
+ qemu_plugin_path_to_binary;
qemu_plugin_register_atexit_cb;
qemu_plugin_register_flush_cb;
qemu_plugin_register_vcpu_exit_cb;
@@ -33,6 +36,7 @@
qemu_plugin_register_vcpu_tb_exec_inline;
qemu_plugin_register_vcpu_tb_trans_cb;
qemu_plugin_reset;
+ qemu_plugin_start_code;
qemu_plugin_tb_get_insn;
qemu_plugin_tb_n_insns;
qemu_plugin_tb_vaddr;
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 18/22] contrib/plugins: add a drcov plugin
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (16 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 17/22] plugins: add helper functions for coverage plugins Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 20:16 ` [PATCH v1 19/22] tests/plugin: allow libinsn.so per-CPU counts Alex Bennée
` (3 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Alexandre Iooss, aaron, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Ivanov Arkady, kuhn.chenqun, ma.mandourr,
Alex Bennée
From: Ivanov Arkady <arkadiy.ivanov@ispras.ru>
This patch adds the ability to generate files in drcov format. Primary
goal this script is to have coverage logfiles thatwork in Lighthouse.
Signed-off-by: Ivanov Arkady <arkadiy.ivanov@ispras.ru>
Message-Id: <163491884553.304355.13246023070235438959.stgit@pc-System-Product-Name>
[AJB: use g_ptr_array instead of slist]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
contrib/plugins/drcov.c | 163 +++++++++++++++++++++++++++++++++++++++
contrib/plugins/Makefile | 1 +
2 files changed, 164 insertions(+)
create mode 100644 contrib/plugins/drcov.c
diff --git a/contrib/plugins/drcov.c b/contrib/plugins/drcov.c
new file mode 100644
index 0000000000..b4a855adaf
--- /dev/null
+++ b/contrib/plugins/drcov.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2021, Ivanov Arkady <arkadiy.ivanov@ispras.ru>
+ *
+ * Drcov - a DynamoRIO-based tool that collects coverage information
+ * from a binary. Primary goal this script is to have coverage log
+ * files that work in Lighthouse.
+ *
+ * License: GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include <inttypes.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <glib.h>
+
+#include <qemu-plugin.h>
+
+QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
+
+static char header[] = "DRCOV VERSION: 2\n"
+ "DRCOV FLAVOR: drcov-64\n"
+ "Module Table: version 2, count 1\n"
+ "Columns: id, base, end, entry, path\n";
+
+static FILE *fp;
+static const char *file_name = "file.drcov.trace";
+static GMutex lock;
+
+typedef struct {
+ uint32_t start;
+ uint16_t size;
+ uint16_t mod_id;
+ bool exec;
+} bb_entry_t;
+
+/* Translated blocks */
+static GPtrArray *blocks;
+
+static void printf_header(unsigned long count)
+{
+ fprintf(fp, "%s", header);
+ const char *path = qemu_plugin_path_to_binary();
+ uint64_t start_code = qemu_plugin_start_code();
+ uint64_t end_code = qemu_plugin_end_code();
+ uint64_t entry = qemu_plugin_entry_code();
+ fprintf(fp, "0, 0x%lx, 0x%lx, 0x%lx, %s\n",
+ start_code, end_code, entry, path);
+ fprintf(fp, "BB Table: %ld bbs\n", count);
+}
+
+static void printf_char_array32(uint32_t data)
+{
+ const uint8_t *bytes = (const uint8_t *)(&data);
+ fwrite(bytes, sizeof(char), sizeof(data), fp);
+}
+
+static void printf_char_array16(uint16_t data)
+{
+ const uint8_t *bytes = (const uint8_t *)(&data);
+ fwrite(bytes, sizeof(char), sizeof(data), fp);
+}
+
+
+static void printf_el(gpointer data, gpointer user_data)
+{
+ bb_entry_t *bb = (bb_entry_t *)data;
+ if (bb->exec) {
+ printf_char_array32(bb->start);
+ printf_char_array16(bb->size);
+ printf_char_array16(bb->mod_id);
+ }
+ g_free(bb);
+}
+
+static void count_block(gpointer data, gpointer user_data)
+{
+ unsigned long *count = (unsigned long *) user_data;
+ bb_entry_t *bb = (bb_entry_t *)data;
+ if (bb->exec) {
+ *count = *count + 1;
+ }
+}
+
+static void plugin_exit(qemu_plugin_id_t id, void *p)
+{
+ unsigned long count = 0;
+ g_mutex_lock(&lock);
+ g_ptr_array_foreach(blocks, count_block, &count);
+
+ /* Print function */
+ printf_header(count);
+ g_ptr_array_foreach(blocks, printf_el, NULL);
+
+ /* Clear */
+ g_ptr_array_free(blocks, true);
+
+ fclose(fp);
+
+ g_mutex_unlock(&lock);
+}
+
+static void plugin_init(void)
+{
+ fp = fopen(file_name, "wb");
+ blocks = g_ptr_array_sized_new(128);
+}
+
+static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
+{
+ bb_entry_t *bb = (bb_entry_t *) udata;
+
+ g_mutex_lock(&lock);
+ bb->exec = true;
+ g_mutex_unlock(&lock);
+}
+
+static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
+{
+ uint64_t pc = qemu_plugin_tb_vaddr(tb);
+ size_t n = qemu_plugin_tb_n_insns(tb);
+
+ g_mutex_lock(&lock);
+
+ bb_entry_t *bb = g_new0(bb_entry_t, 1);
+ for (int i = 0; i < n; i++) {
+ bb->size += qemu_plugin_insn_size(qemu_plugin_tb_get_insn(tb, i));
+ }
+
+ bb->start = pc;
+ bb->mod_id = 0;
+ bb->exec = false;
+ g_ptr_array_add(blocks, bb);
+
+ g_mutex_unlock(&lock);
+ qemu_plugin_register_vcpu_tb_exec_cb(tb, vcpu_tb_exec,
+ QEMU_PLUGIN_CB_NO_REGS,
+ (void *)bb);
+
+}
+
+QEMU_PLUGIN_EXPORT
+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);
+ if (g_strcmp0(tokens[0], "filename") == 0) {
+ file_name = g_strdup(tokens[1]);
+ }
+ }
+
+ plugin_init();
+
+ qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
+ qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
+
+ return 0;
+}
diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
index 576ed5875a..7eed5d51f8 100644
--- a/contrib/plugins/Makefile
+++ b/contrib/plugins/Makefile
@@ -21,6 +21,7 @@ NAMES += lockstep
NAMES += hwprofile
NAMES += cache
NAMES += stxp-plugin
+NAMES += drcov
SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 19/22] tests/plugin: allow libinsn.so per-CPU counts
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (17 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 18/22] contrib/plugins: add a drcov plugin Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 20:16 ` [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so Alex Bennée
` (2 subsequent siblings)
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Alexandre Iooss, kuhn.chenqun, ma.mandourr, Alex Bennée
We won't go fully flexible but for most system emulation 8 vCPUs
resolution should be enough for anybody ;-)
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/plugin/insn.c | 39 +++++++++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index d229fdc001..d5a0a08cb4 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -16,22 +16,33 @@
QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
-static uint64_t insn_count;
+#define MAX_CPUS 8 /* lets not go nuts */
+
+typedef struct {
+ uint64_t last_pc;
+ uint64_t insn_count;
+} InstructionCount;
+
+static InstructionCount counts[MAX_CPUS];
+static uint64_t inline_insn_count;
+
static bool do_inline;
static bool do_size;
+static bool do_frequency;
static GArray *sizes;
static void vcpu_insn_exec_before(unsigned int cpu_index, void *udata)
{
- static uint64_t last_pc;
+ unsigned int i = cpu_index % MAX_CPUS;
+ InstructionCount *c = &counts[i];
uint64_t this_pc = GPOINTER_TO_UINT(udata);
- if (this_pc == last_pc) {
+ if (this_pc == c->last_pc) {
g_autofree gchar *out = g_strdup_printf("detected repeat execution @ 0x%"
PRIx64 "\n", this_pc);
qemu_plugin_outs(out);
}
- last_pc = this_pc;
- insn_count++;
+ c->last_pc = this_pc;
+ c->insn_count++;
}
static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
@@ -44,7 +55,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
if (do_inline) {
qemu_plugin_register_vcpu_insn_exec_inline(
- insn, QEMU_PLUGIN_INLINE_ADD_U64, &insn_count, 1);
+ insn, QEMU_PLUGIN_INLINE_ADD_U64, &inline_insn_count, 1);
} else {
uint64_t vaddr = qemu_plugin_insn_vaddr(insn);
qemu_plugin_register_vcpu_insn_exec_cb(
@@ -66,9 +77,9 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
static void plugin_exit(qemu_plugin_id_t id, void *p)
{
g_autoptr(GString) out = g_string_new(NULL);
+ int i;
if (do_size) {
- int i;
for (i = 0; i <= sizes->len; i++) {
unsigned long *cnt = &g_array_index(sizes, unsigned long, i);
if (*cnt) {
@@ -76,8 +87,20 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
"len %d bytes: %ld insns\n", i, *cnt);
}
}
+ } else if (do_inline) {
+ g_string_append_printf(out, "insns: %" PRIu64 "\n", inline_insn_count);
} else {
- g_string_append_printf(out, "insns: %" PRIu64 "\n", insn_count);
+ uint64_t total_insns = 0;
+ for (i = 0; i < MAX_CPUS; i++) {
+ InstructionCount *c = &counts[i];
+ if (c->insn_count) {
+ g_string_append_printf(out, "cpu %d insns: %" PRIu64 "\n",
+ i, c->insn_count);
+ total_insns += c->insn_count;
+ }
+ }
+ g_string_append_printf(out, "total insns: %" PRIu64 "\n",
+ total_insns);
}
qemu_plugin_outs(out->str);
}
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (18 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 19/22] tests/plugin: allow libinsn.so per-CPU counts Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 22:13 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
2022-01-24 20:16 ` [PATCH v1 22/22] plugins: move reset of plugin data to tb_start Alex Bennée
21 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Vasilev Oleg, Richard Henderson, aaron, robhenry,
mahmoudabdalghany, minyihh, cota, Luke.Craig, Alexandre Iooss,
kuhn.chenqun, ma.mandourr, Alex Bennée
This adds simple instruction matching to the libinsn.so plugin which
is useful for examining the execution distance between instructions.
For example to track how often we flush in ARM due to TLB updates:
-plugin ./tests/plugin/libinsn.so,match=tlbi
which leads to output like this:
0xffffffc01018fa00, tlbi aside1is, x0, 339, 32774 match hits, 23822 since last, avg 47279
0xffffffc01018fa00, tlbi aside1is, x0, 340, 32775 match hits, 565051 since last, avg 47295
0xffffffc0101915a4, tlbi vae1is, x0, 155, 32776 match hits, 151135 since last, avg 47298
0xffffffc01018fc60, tlbi vae1is, x4, 224, 32777 match hits, 814 since last, avg 47297
0xffffffc010194a44, tlbi vale1is, x1, 8835, 32778 match hits, 52027 since last, avg 47297
0xffffffc010194a44, tlbi vale1is, x1, 8836, 32779 match hits, 8347 since last, avg 47296
0xffffffc010194a44, tlbi vale1is, x1, 8837, 32780 match hits, 33677 since last, avg 47295
showing we do some sort of TLBI invalidation every 47 thousand
instructions.
Cc: Vasilev Oleg <vasilev.oleg@huawei.com>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Emilio Cota <cota@braap.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/plugin/insn.c | 88 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 87 insertions(+), 1 deletion(-)
diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index d5a0a08cb4..3f48c86fd7 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -28,9 +28,25 @@ static uint64_t inline_insn_count;
static bool do_inline;
static bool do_size;
-static bool do_frequency;
static GArray *sizes;
+typedef struct {
+ char *match_string;
+ uint64_t hits[MAX_CPUS];
+ uint64_t last_hit[MAX_CPUS];
+ uint64_t total_delta[MAX_CPUS];
+ GPtrArray *history[MAX_CPUS];
+} Match;
+
+static GArray *matches;
+
+typedef struct {
+ Match *match;
+ uint64_t vaddr;
+ uint64_t hits;
+ char *disas;
+} Instruction;
+
static void vcpu_insn_exec_before(unsigned int cpu_index, void *udata)
{
unsigned int i = cpu_index % MAX_CPUS;
@@ -45,6 +61,36 @@ static void vcpu_insn_exec_before(unsigned int cpu_index, void *udata)
c->insn_count++;
}
+static void vcpu_insn_matched_exec_before(unsigned int cpu_index, void *udata)
+{
+ unsigned int i = cpu_index % MAX_CPUS;
+ Instruction *insn = (Instruction *) udata;
+ Match *match = insn->match;
+ g_autoptr(GString) ts = g_string_new("");
+
+ insn->hits++;
+ g_string_append_printf(ts, "0x%" PRIx64 ", %s, % "PRId64,
+ insn->vaddr, insn->disas, insn->hits);
+
+ uint64_t icount = counts[i].insn_count;
+ uint64_t delta = icount - match->last_hit[i];
+
+ match->hits[i]++;
+ match->total_delta[i] += delta;
+
+ g_string_append_printf(ts,
+ ", %"PRId64" match hits, %"PRId64
+ " since last, avg %"PRId64"\n",
+ match->hits[i], delta,
+ match->total_delta[i] / match->hits[i]);
+
+ match->last_hit[i] = icount;
+
+ qemu_plugin_outs(ts->str);
+
+ g_ptr_array_add(match->history[i], insn);
+}
+
static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
{
size_t n = qemu_plugin_tb_n_insns(tb);
@@ -71,6 +117,29 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
unsigned long *cnt = &g_array_index(sizes, unsigned long, sz);
(*cnt)++;
}
+
+ /*
+ * If we are tracking certain instructions we will need more
+ * information about the instruction which we also need to
+ * save if there is a hit.
+ */
+ if (matches) {
+ char *insn_disas = qemu_plugin_insn_disas(insn);
+ int j;
+ for (j = 0; j < matches->len; j++) {
+ Match *m = &g_array_index(matches, Match, j);
+ if (g_str_has_prefix(insn_disas, m->match_string)) {
+ Instruction *rec = g_new0(Instruction, 1);
+ rec->disas = g_strdup(insn_disas);
+ rec->vaddr = qemu_plugin_insn_vaddr(insn);
+ rec->match = m;
+ qemu_plugin_register_vcpu_insn_exec_cb(
+ insn, vcpu_insn_matched_exec_before,
+ QEMU_PLUGIN_CB_NO_REGS, rec);
+ }
+ }
+ g_free(insn_disas);
+ }
}
}
@@ -105,6 +174,21 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
qemu_plugin_outs(out->str);
}
+
+/* Add a match to the array of matches */
+static void parse_match(char *match)
+{
+ Match new_match = { .match_string = match };
+ int i;
+ for (i = 0; i < MAX_CPUS; i++) {
+ new_match.history[i] = g_ptr_array_new();
+ }
+ if (!matches) {
+ matches = g_array_new(false, true, sizeof(Match));
+ }
+ g_array_append_val(matches, new_match);
+}
+
QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
const qemu_info_t *info,
int argc, char **argv)
@@ -122,6 +206,8 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
return -1;
}
+ } else if (g_strcmp0(tokens[0], "match") == 0) {
+ parse_match(tokens[1]);
} else {
fprintf(stderr, "option parsing failed: %s\n", opt);
return -1;
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (19 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
2022-01-24 22:14 ` Philippe Mathieu-Daudé via
2022-01-26 21:33 ` Richard Henderson
2022-01-24 20:16 ` [PATCH v1 22/22] plugins: move reset of plugin data to tb_start Alex Bennée
21 siblings, 2 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Richard Henderson, aaron, robhenry,
mahmoudabdalghany, minyihh, cota, Luke.Craig, Paolo Bonzini,
kuhn.chenqun, ma.mandourr, Alex Bennée
I think these have been wrong since f193c7979c (do not depend on
thunk.h - more log items). Fix them so as not to confuse other
debugging.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
target/i386/tcg/sysemu/seg_helper.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/i386/tcg/sysemu/seg_helper.c b/target/i386/tcg/sysemu/seg_helper.c
index bf3444c26b..824b9a5a26 100644
--- a/target/i386/tcg/sysemu/seg_helper.c
+++ b/target/i386/tcg/sysemu/seg_helper.c
@@ -167,7 +167,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
cs->interrupt_request &= ~(CPU_INTERRUPT_HARD |
CPU_INTERRUPT_VIRQ);
intno = cpu_get_pic_interrupt(env);
- qemu_log_mask(CPU_LOG_TB_IN_ASM,
+ qemu_log_mask(CPU_LOG_INT,
"Servicing hardware INT=0x%02x\n", intno);
do_interrupt_x86_hardirq(env, intno, 1);
break;
@@ -175,7 +175,7 @@ bool x86_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
cpu_svm_check_intercept_param(env, SVM_EXIT_VINTR, 0, 0);
intno = x86_ldl_phys(cs, env->vm_vmcb
+ offsetof(struct vmcb, control.int_vector));
- qemu_log_mask(CPU_LOG_TB_IN_ASM,
+ qemu_log_mask(CPU_LOG_INT,
"Servicing virtual hardware INT=0x%02x\n", intno);
do_interrupt_x86_hardirq(env, intno, 1);
cs->interrupt_request &= ~CPU_INTERRUPT_VIRQ;
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v1 22/22] plugins: move reset of plugin data to tb_start
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
` (20 preceding siblings ...)
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
@ 2022-01-24 20:16 ` Alex Bennée
21 siblings, 0 replies; 40+ messages in thread
From: Alex Bennée @ 2022-01-24 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Richard Henderson, aaron, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Paolo Bonzini, kuhn.chenqun, ma.mandourr,
Alex Bennée
We can't always guarantee we get to the end of a translator loop.
Although this can happen for a variety of reasons it does happen more
often on x86 system emulation when an instruction spans across to an
un-faulted page. This caused confusion of the instruction tracking
data resulting in apparent reverse execution (at least from the
plugins point of view).
Fix this by moving the reset code to plugin_gen_tb_start so we always
start with a clean slate.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/824
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
accel/tcg/plugin-gen.c | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c
index 22d95fe1c3..ae70e4a5b0 100644
--- a/accel/tcg/plugin-gen.c
+++ b/accel/tcg/plugin-gen.c
@@ -854,10 +854,21 @@ static void plugin_gen_inject(const struct qemu_plugin_tb *plugin_tb)
bool plugin_gen_tb_start(CPUState *cpu, const TranslationBlock *tb, bool mem_only)
{
- struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
bool ret = false;
if (test_bit(QEMU_PLUGIN_EV_VCPU_TB_TRANS, cpu->plugin_mask)) {
+ struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
+ int i;
+
+ /* reset callbacks */
+ for (i = 0; i < PLUGIN_N_CB_SUBTYPES; i++) {
+ if (ptb->cbs[i]) {
+ g_array_set_size(ptb->cbs[i], 0);
+ }
+ }
+ ptb->n = 0;
+ tcg_ctx->plugin_insn = NULL;
+
ret = true;
ptb->vaddr = tb->pc;
@@ -904,23 +915,19 @@ void plugin_gen_insn_end(void)
plugin_gen_empty_callback(PLUGIN_GEN_AFTER_INSN);
}
+/*
+ * There are cases where we never get to finalise a translation - for
+ * example a page fault during translation. As a result we shouldn't
+ * do any clean-up here and make sure things are reset in
+ * plugin_gen_tb_start.
+ */
void plugin_gen_tb_end(CPUState *cpu)
{
struct qemu_plugin_tb *ptb = tcg_ctx->plugin_tb;
- int i;
/* collect instrumentation requests */
qemu_plugin_tb_trans_cb(cpu, ptb);
/* inject the instrumentation at the appropriate places */
plugin_gen_inject(ptb);
-
- /* clean up */
- for (i = 0; i < PLUGIN_N_CB_SUBTYPES; i++) {
- if (ptb->cbs[i]) {
- g_array_set_size(ptb->cbs[i], 0);
- }
- }
- ptb->n = 0;
- tcg_ctx->plugin_insn = NULL;
}
--
2.30.2
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v1 01/22] tests/Makefile.include: clean-up old code
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
@ 2022-01-24 20:38 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 20:38 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr
On 1/24/22 21:15, Alex Bennée wrote:
> This is no longer needed since 5516623020 ("meson: convert migration
> directory to Meson")
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/Makefile.include | 4 ----
> 1 file changed, 4 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 04/22] .gitignore: add .gcov pattern
2022-01-24 20:15 ` [PATCH v1 04/22] .gitignore: add .gcov pattern Alex Bennée
@ 2022-01-24 20:38 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 20:38 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: aaron, robhenry, mahmoudabdalghany, minyihh, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr
On 1/24/22 21:15, Alex Bennée wrote:
> The gcovr tool is very messy and can leave a lot of crap in the source
> tree even when using build directories.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> .gitignore | 1 +
> 1 file changed, 1 insertion(+)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 14/22] tracing: remove TCG memory access tracing
2022-01-24 20:16 ` [PATCH v1 14/22] tracing: remove TCG memory access tracing Alex Bennée
@ 2022-01-24 22:06 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 22:06 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Stefan Hajnoczi, Riku Voipio, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Paolo Bonzini, kuhn.chenqun, ma.mandourr
On 1/24/22 21:16, Alex Bennée wrote:
> If you really want to trace all memory operations TCG plugins gives
> you a more flexible interface for doing so.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Cc: Luis Vilanova <vilanova@imperial.ac.uk>
> Cc: Stefan Hajnoczi <stefanha@redhat.com>
>
> --
git tools need 3 dashes '---' sto split ections.
> v2
> - dropped extra line
> ---
> accel/tcg/atomic_template.h | 12 ------------
> accel/tcg/cputlb.c | 2 --
> accel/tcg/user-exec.c | 14 --------------
> tcg/tcg-op.c | 5 -----
> accel/tcg/atomic_common.c.inc | 20 --------------------
> trace-events | 14 --------------
> 6 files changed, 67 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build
2022-01-24 20:16 ` [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build Alex Bennée
@ 2022-01-24 22:07 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 22:07 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Stefan Hajnoczi, Richard Henderson, aaron, robhenry,
Luis Vilanova, mahmoudabdalghany, minyihh, cota, Luke.Craig,
Paolo Bonzini, kuhn.chenqun, ma.mandourr
On 1/24/22 21:16, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Cc: Luis Vilanova <vilanova@imperial.ac.uk>
> Cc: Stefan Hajnoczi <stefanha@redhat.com>
>
> ---
> v2
> - dropped includes here instead of next patch
> ---
> include/exec/helper-proto.h | 1 -
> include/exec/helper-tcg.h | 1 -
> include/trace-tcg.h | 6 ------
> trace/meson.build | 1 -
> 4 files changed, 9 deletions(-)
> delete mode 100644 include/trace-tcg.h
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so
2022-01-24 20:16 ` [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so Alex Bennée
@ 2022-01-24 22:13 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 22:13 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Vasilev Oleg, Richard Henderson, aaron, robhenry,
mahmoudabdalghany, minyihh, cota, Luke.Craig, Alexandre Iooss,
kuhn.chenqun, ma.mandourr
On 1/24/22 21:16, Alex Bennée wrote:
> This adds simple instruction matching to the libinsn.so plugin which
> is useful for examining the execution distance between instructions.
> For example to track how often we flush in ARM due to TLB updates:
>
> -plugin ./tests/plugin/libinsn.so,match=tlbi
>
> which leads to output like this:
>
> 0xffffffc01018fa00, tlbi aside1is, x0, 339, 32774 match hits, 23822 since last, avg 47279
> 0xffffffc01018fa00, tlbi aside1is, x0, 340, 32775 match hits, 565051 since last, avg 47295
> 0xffffffc0101915a4, tlbi vae1is, x0, 155, 32776 match hits, 151135 since last, avg 47298
> 0xffffffc01018fc60, tlbi vae1is, x4, 224, 32777 match hits, 814 since last, avg 47297
> 0xffffffc010194a44, tlbi vale1is, x1, 8835, 32778 match hits, 52027 since last, avg 47297
> 0xffffffc010194a44, tlbi vale1is, x1, 8836, 32779 match hits, 8347 since last, avg 47296
> 0xffffffc010194a44, tlbi vale1is, x1, 8837, 32780 match hits, 33677 since last, avg 47295
Just nitpicking the output below.
> showing we do some sort of TLBI invalidation every 47 thousand
> instructions.
>
> Cc: Vasilev Oleg <vasilev.oleg@huawei.com>
> Cc: Richard Henderson <richard.henderson@linaro.org>
> Cc: Emilio Cota <cota@braap.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/plugin/insn.c | 88 ++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 87 insertions(+), 1 deletion(-)
> +static void vcpu_insn_matched_exec_before(unsigned int cpu_index, void *udata)
> +{
> + unsigned int i = cpu_index % MAX_CPUS;
> + Instruction *insn = (Instruction *) udata;
> + Match *match = insn->match;
> + g_autoptr(GString) ts = g_string_new("");
> +
> + insn->hits++;
> + g_string_append_printf(ts, "0x%" PRIx64 ", %s, % "PRId64,
> + insn->vaddr, insn->disas, insn->hits);
Maybe use something else the ',' to split last arg (hits)? \t or --?
Otherwise it seems part of the decoded instr.
> +
> + uint64_t icount = counts[i].insn_count;
> + uint64_t delta = icount - match->last_hit[i];
> +
> + match->hits[i]++;
> + match->total_delta[i] += delta;
> +
> + g_string_append_printf(ts,
> + ", %"PRId64" match hits, %"PRId64
Maybe prefix delta with '+'.
> + " since last, avg %"PRId64"\n",
> + match->hits[i], delta,
> + match->total_delta[i] / match->hits[i]);
> +
> + match->last_hit[i] = icount;
> +
> + qemu_plugin_outs(ts->str);
> +
> + g_ptr_array_add(match->history[i], insn);
> +}
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
@ 2022-01-24 22:14 ` Philippe Mathieu-Daudé via
2022-01-26 21:33 ` Richard Henderson
1 sibling, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-24 22:14 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Eduardo Habkost, Richard Henderson, aaron, robhenry,
mahmoudabdalghany, minyihh, cota, Luke.Craig, Paolo Bonzini,
kuhn.chenqun, ma.mandourr
On 1/24/22 21:16, Alex Bennée wrote:
> I think these have been wrong since f193c7979c (do not depend on
> thunk.h - more log items). Fix them so as not to confuse other
> debugging.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/i386/tcg/sysemu/seg_helper.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning
2022-01-24 20:15 ` [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning Alex Bennée
@ 2022-01-25 7:40 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2022-01-25 7:40 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: minyihh, robhenry, mahmoudabdalghany, aaron, cota, Luke.Craig,
kuhn.chenqun, ma.mandourr
On 24/01/2022 21.15, Alex Bennée wrote:
> Left over .gcno files from old builds can really confuse gcov and the
> user expects a clean slate after "make clean". Make clean mean clean.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> Makefile | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index db9a788601..65e0d2dd4e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -206,7 +206,8 @@ recurse-clean: $(addsuffix /clean, $(ROM_DIRS))
> clean: recurse-clean
> -$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean || :
> -$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) clean-ctlist || :
> - find . \( -name '*.so' -o -name '*.dll' -o -name '*.[oda]' \) -type f \
> + find . \( -name '*.so' -o -name '*.dll' -o \
> + -name '*.[oda]' -o -name '*.gcno' \) -type f \
My git complains here:
.git/rebase-apply/patch:15: space before tab in indent.
-name '*.[oda]' -o -name '*.gcno' \) -type f \
warning: 1 line adds whitespace errors.
Please remove the space before the tab.
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
@ 2022-01-25 8:17 ` Thomas Huth
2022-02-01 14:58 ` Aaron Lindsay via
2022-02-01 15:00 ` Aaron Lindsay via
1 sibling, 1 reply; 40+ messages in thread
From: Thomas Huth @ 2022-01-25 8:17 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Peter Maydell, minyihh, robhenry, mahmoudabdalghany, aaron, cota,
Luke.Craig, kuhn.chenqun, Alexandre Iooss, ma.mandourr,
open list:ARM TCG CPUs
On 24/01/2022 21.15, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
> Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
>
> ---
> [AJB] this was for testing, I think you can show the same stuff with
> the much more complete execlog now.
> ---
> contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
> tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
> contrib/plugins/Makefile | 1 +
> tests/tcg/aarch64/Makefile.target | 3 ++
> 4 files changed, 82 insertions(+)
> create mode 100644 contrib/plugins/stxp-plugin.c
> create mode 100644 tests/tcg/aarch64/stxp.c
>
> diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
> new file mode 100644
> index 0000000000..432cf8c1ed
> --- /dev/null
> +++ b/contrib/plugins/stxp-plugin.c
> @@ -0,0 +1,50 @@
> +#include <stdio.h>
> +#include <stdarg.h>
> +#include <qemu-plugin.h>
> +
> +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
> +
> +void qemu_logf(const char *str, ...)
> +{
> + char message[1024];
> + va_list args;
> + va_start(args, str);
> + vsnprintf(message, 1023, str, args);
> +
> + qemu_plugin_outs(message);
> +
> + va_end(args);
> +}
> +
> +void before_insn_cb(unsigned int cpu_index, void *udata)
> +{
> + uint64_t pc = (uint64_t)udata;
> + qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
> +}
> +
> +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
Could you please break the line to avoid checkpatch errors:
ERROR: line over 90 characters
#63: FILE: contrib/plugins/stxp-plugin.c:25:
+static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo,
uint64_t va, void *udata)
ERROR: line over 90 characters
#77: FILE: contrib/plugins/stxp-plugin.c:39:
+ qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb,
QEMU_PLUGIN_CB_R_REGS, (void *)pc);
ERROR: line over 90 characters
#78: FILE: contrib/plugins/stxp-plugin.c:40:
+ qemu_plugin_register_vcpu_mem_cb(insn, mem_cb,
QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
ERROR: "(foo*)" should be "(foo *)"
#78: FILE: contrib/plugins/stxp-plugin.c:40:
+ qemu_plugin_register_vcpu_mem_cb(insn, mem_cb,
QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
total: 4 errors, 1 warnings, 92 lines checked
Thanks,
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default
2022-01-24 20:15 ` [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default Alex Bennée
@ 2022-01-25 8:18 ` Thomas Huth
0 siblings, 0 replies; 40+ messages in thread
From: Thomas Huth @ 2022-01-25 8:18 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Laurent Vivier, aaron, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Paolo Bonzini, kuhn.chenqun, ma.mandourr
On 24/01/2022 21.15, Alex Bennée wrote:
> If this starts causing failures again we should probably fix that.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/qtest/vhost-user-test.c | 21 +++++++++------------
> 1 file changed, 9 insertions(+), 12 deletions(-)
>
Works for me, too:
Tested-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2
2022-01-24 20:15 ` [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2 Alex Bennée
@ 2022-01-25 10:23 ` Thomas Huth
2022-01-25 10:48 ` Philippe Mathieu-Daudé via
0 siblings, 1 reply; 40+ messages in thread
From: Thomas Huth @ 2022-01-25 10:23 UTC (permalink / raw)
To: Alex Bennée, qemu-devel, Qemu-block, Philippe Mathieu-Daudé
Cc: Ed Maste, Daniel P . Berrangé,
Beraldo Leal, aaron, robhenry, mahmoudabdalghany, minyihh, cota,
Wainer dos Santos Moschetta, Luke.Craig, kuhn.chenqun,
ma.mandourr, Warner Losh, Li-Wen Hsu
On 24/01/2022 21.15, Alex Bennée wrote:
> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
> The previous commit removed all uses of libxml2.
>
> Refresh lcitool submodule, update qemu.yml and refresh the generated
> files by running:
>
> $ make lcitool-refresh
>
> Note: This refreshment also removes libudev dependency on Fedora
> and CentOS due to libvirt-ci commit 18bfaee ("mappings: Improve
> mapping for libudev"), since "The udev project has been absorbed
> by the systemd project", and lttng-ust on FreeBSD runners due to
> libvirt-ci commit 6dd9b6f ("guests: drop lttng-ust from FreeBSD
> platform").
>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20220121154134.315047-6-f4bug@amsat.org>
> ---
> .gitlab-ci.d/cirrus/freebsd-12.vars | 2 +-
> .gitlab-ci.d/cirrus/freebsd-13.vars | 2 +-
> .gitlab-ci.d/cirrus/macos-11.vars | 2 +-
> tests/docker/dockerfiles/alpine.docker | 4 ++--
> tests/docker/dockerfiles/centos8.docker | 4 +---
> tests/docker/dockerfiles/fedora.docker | 4 +---
> tests/docker/dockerfiles/opensuse-leap.docker | 3 +--
> tests/docker/dockerfiles/ubuntu1804.docker | 3 +--
> tests/docker/dockerfiles/ubuntu2004.docker | 3 +--
> tests/lcitool/libvirt-ci | 2 +-
> tests/lcitool/projects/qemu.yml | 1 -
> 11 files changed, 11 insertions(+), 19 deletions(-)
>
> diff --git a/.gitlab-ci.d/cirrus/freebsd-12.vars b/.gitlab-ci.d/cirrus/freebsd-12.vars
> index 9c52266811..07f313aa3a 100644
> --- a/.gitlab-ci.d/cirrus/freebsd-12.vars
> +++ b/.gitlab-ci.d/cirrus/freebsd-12.vars
> @@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
> NINJA='/usr/local/bin/ninja'
> PACKAGING_COMMAND='pkg'
> PIP3='/usr/local/bin/pip-3.8'
> -PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
> +PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
> PYPI_PKGS=''
> PYTHON='/usr/local/bin/python3'
> diff --git a/.gitlab-ci.d/cirrus/freebsd-13.vars b/.gitlab-ci.d/cirrus/freebsd-13.vars
> index 7b44dba324..8a648dda1e 100644
> --- a/.gitlab-ci.d/cirrus/freebsd-13.vars
> +++ b/.gitlab-ci.d/cirrus/freebsd-13.vars
> @@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
> NINJA='/usr/local/bin/ninja'
> PACKAGING_COMMAND='pkg'
> PIP3='/usr/local/bin/pip-3.8'
> -PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
> +PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2 sdl2_image snappy spice-protocol tesseract texinfo usbredir virglrenderer vte3 zstd'
Seems like this now also added fusefs-libs3 on FreeBSD which causes the
build to break:
https://gitlab.com/thuth/qemu/-/jobs/2012083924#L3454
Any ideas how to best fix this?
Thomas
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2
2022-01-25 10:23 ` Thomas Huth
@ 2022-01-25 10:48 ` Philippe Mathieu-Daudé via
0 siblings, 0 replies; 40+ messages in thread
From: Philippe Mathieu-Daudé via @ 2022-01-25 10:48 UTC (permalink / raw)
To: Thomas Huth, Alex Bennée, qemu-devel, Qemu-block
Cc: minyihh, ma.mandourr, Luke.Craig, cota, aaron, kuhn.chenqun,
robhenry, mahmoudabdalghany, Daniel P . Berrangé,
Wainer dos Santos Moschetta, Beraldo Leal, Warner Losh, Ed Maste,
Li-Wen Hsu
On 1/25/22 11:23, Thomas Huth wrote:
> On 24/01/2022 21.15, Alex Bennée wrote:
>> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>
>> The previous commit removed all uses of libxml2.
>>
>> Refresh lcitool submodule, update qemu.yml and refresh the generated
>> files by running:
>>
>> $ make lcitool-refresh
>>
>> Note: This refreshment also removes libudev dependency on Fedora
>> and CentOS due to libvirt-ci commit 18bfaee ("mappings: Improve
>> mapping for libudev"), since "The udev project has been absorbed
>> by the systemd project", and lttng-ust on FreeBSD runners due to
>> libvirt-ci commit 6dd9b6f ("guests: drop lttng-ust from FreeBSD
>> platform").
>>
>> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Message-Id: <20220121154134.315047-6-f4bug@amsat.org>
>> ---
>> .gitlab-ci.d/cirrus/freebsd-12.vars | 2 +-
>> .gitlab-ci.d/cirrus/freebsd-13.vars | 2 +-
>> .gitlab-ci.d/cirrus/macos-11.vars | 2 +-
>> tests/docker/dockerfiles/alpine.docker | 4 ++--
>> tests/docker/dockerfiles/centos8.docker | 4 +---
>> tests/docker/dockerfiles/fedora.docker | 4 +---
>> tests/docker/dockerfiles/opensuse-leap.docker | 3 +--
>> tests/docker/dockerfiles/ubuntu1804.docker | 3 +--
>> tests/docker/dockerfiles/ubuntu2004.docker | 3 +--
>> tests/lcitool/libvirt-ci | 2 +-
>> tests/lcitool/projects/qemu.yml | 1 -
>> 11 files changed, 11 insertions(+), 19 deletions(-)
>>
>> diff --git a/.gitlab-ci.d/cirrus/freebsd-12.vars
>> b/.gitlab-ci.d/cirrus/freebsd-12.vars
>> index 9c52266811..07f313aa3a 100644
>> --- a/.gitlab-ci.d/cirrus/freebsd-12.vars
>> +++ b/.gitlab-ci.d/cirrus/freebsd-12.vars
>> @@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
>> NINJA='/usr/local/bin/ninja'
>> PACKAGING_COMMAND='pkg'
>> PIP3='/usr/local/bin/pip-3.8'
>> -PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache
>> cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext
>> git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt
>> libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm
>> lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5
>> pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx
>> py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2
>> sdl2_image snappy spice-protocol tesseract texinfo usbredir
>> virglrenderer vte3 zstd'
>> +PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache
>> cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc
>> fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi
>> libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm
>> lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman
>> pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx
>> py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2
>> sdl2_image snappy spice-protocol tesseract texinfo usbredir
>> virglrenderer vte3 zstd'
>> PYPI_PKGS=''
>> PYTHON='/usr/local/bin/python3'
>> diff --git a/.gitlab-ci.d/cirrus/freebsd-13.vars
>> b/.gitlab-ci.d/cirrus/freebsd-13.vars
>> index 7b44dba324..8a648dda1e 100644
>> --- a/.gitlab-ci.d/cirrus/freebsd-13.vars
>> +++ b/.gitlab-ci.d/cirrus/freebsd-13.vars
>> @@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
>> NINJA='/usr/local/bin/ninja'
>> PACKAGING_COMMAND='pkg'
>> PIP3='/usr/local/bin/pip-3.8'
>> -PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache
>> cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc gettext
>> git glib gmake gnutls gsed gtk3 libepoxy libffi libgcrypt
>> libjpeg-turbo libnfs libspice-server libssh libtasn1 libxml2 llvm
>> lttng-ust lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5
>> pixman pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx
>> py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2
>> sdl2_image snappy spice-protocol tesseract texinfo usbredir
>> virglrenderer vte3 zstd'
>> +PKGS='alsa-lib bash bzip2 ca_root_nss capstone4 ccache
>> cdrkit-genisoimage ctags curl cyrus-sasl dbus diffutils dtc
>> fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 libepoxy libffi
>> libgcrypt libjpeg-turbo libnfs libspice-server libssh libtasn1 llvm
>> lzo2 meson ncurses nettle ninja opencv p5-Test-Harness perl5 pixman
>> pkgconf png py38-numpy py38-pillow py38-pip py38-sphinx
>> py38-sphinx_rtd_theme py38-virtualenv py38-yaml python3 rpm2cpio sdl2
>> sdl2_image snappy spice-protocol tesseract texinfo usbredir
>> virglrenderer vte3 zstd'
>
> Seems like this now also added fusefs-libs3 on FreeBSD which causes the
> build to break:
>
> https://gitlab.com/thuth/qemu/-/jobs/2012083924#L3454
>
> Any ideas how to best fix this?
Candidate patch:
https://lore.kernel.org/qemu-devel/20220124220357.74017-1-f4bug@amsat.org/
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels)
2022-01-24 20:15 ` [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels) Alex Bennée
@ 2022-01-25 21:29 ` Vladimir Sementsov-Ogievskiy
0 siblings, 0 replies; 40+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2022-01-25 21:29 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Kevin Wolf, Hanna Reitz, Thomas Huth, Stefan Hajnoczi,
open list:Block layer core, Peter Maydell, Michael Tokarev,
aaron, robhenry, Philippe Mathieu-Daudé,
mahmoudabdalghany, minyihh, cota, Wainer dos Santos Moschetta,
Luke.Craig, kuhn.chenqun, ma.mandourr, Beraldo Leal,
Denis V. Lunev
24.01.2022 23:15, Alex Bennée wrote:
> From: Michael Tokarev <mjt@tls.msk.ru>
>
> For a long time, we assumed that libxml2 is necessary for parallels
> block format support (block/parallels*). However, this format actually
> does not use libxml [*]. Since this is the only user of libxml2 in
> whole QEMU tree, we can drop all libxml2 checks and dependencies too.
>
> It is even more: --enable-parallels configure option was the only
> option which was silently ignored when it's (fake) dependency
> (libxml2) isn't installed.
>
> Drop all mentions of libxml2.
>
> [*] Actually the basis for libxml use were introduced in commit
> ed279a06c53 ("configure: add dependency") but the implementation
> was never merged:
> https://lore.kernel.org/qemu-devel/70227bbd-a517-70e9-714f-e6e0ec431be9@openvz.org/
>
> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> Message-Id: <20220119090423.149315-1-mjt@msgid.tls.msk.ru>
> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> [PMD: Updated description and adapted to use lcitool]
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20220121154134.315047-5-f4bug@amsat.org>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Parallels format includes xml disk descriptor format, which was never merged to Qemu. Yes, the introduced dependency was premature, sorry for that :(
The implementation of xml part was sent, but only for someone other who want to continue this work, Virtuozzo don't have such plans now:
https://lists.gnu.org/archive/html/qemu-devel/2020-11/msg03601.html
--
Best regards,
Vladimir
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
2022-01-24 22:14 ` Philippe Mathieu-Daudé via
@ 2022-01-26 21:33 ` Richard Henderson
1 sibling, 0 replies; 40+ messages in thread
From: Richard Henderson @ 2022-01-26 21:33 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Eduardo Habkost, aaron, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Paolo Bonzini, kuhn.chenqun, ma.mandourr
On 1/25/22 7:16 AM, Alex Bennée wrote:
> I think these have been wrong since f193c7979c (do not depend on
> thunk.h - more log items). Fix them so as not to confuse other
> debugging.
>
> Signed-off-by: Alex Bennée<alex.bennee@linaro.org>
> ---
> target/i386/tcg/sysemu/seg_helper.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-01-25 8:17 ` Thomas Huth
@ 2022-02-01 14:58 ` Aaron Lindsay via
0 siblings, 0 replies; 40+ messages in thread
From: Aaron Lindsay via @ 2022-02-01 14:58 UTC (permalink / raw)
To: Thomas Huth
Cc: Alex Bennée, qemu-devel, Peter Maydell, robhenry,
mahmoudabdalghany, minyihh, cota, Luke.Craig, Alexandre Iooss,
kuhn.chenqun, ma.mandourr, open list:ARM TCG CPUs
On Jan 25 09:17, Thomas Huth wrote:
> On 24/01/2022 21.15, Alex Bennée wrote:
> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> > Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
> > Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
> >
> > ---
> > [AJB] this was for testing, I think you can show the same stuff with
> > the much more complete execlog now.
> > ---
> > contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
> > tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
> > contrib/plugins/Makefile | 1 +
> > tests/tcg/aarch64/Makefile.target | 3 ++
> > 4 files changed, 82 insertions(+)
> > create mode 100644 contrib/plugins/stxp-plugin.c
> > create mode 100644 tests/tcg/aarch64/stxp.c
> >
> > diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
> > new file mode 100644
> > index 0000000000..432cf8c1ed
> > --- /dev/null
> > +++ b/contrib/plugins/stxp-plugin.c
> > @@ -0,0 +1,50 @@
> > +#include <stdio.h>
> > +#include <stdarg.h>
> > +#include <qemu-plugin.h>
> > +
> > +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
> > +
> > +void qemu_logf(const char *str, ...)
> > +{
> > + char message[1024];
> > + va_list args;
> > + va_start(args, str);
> > + vsnprintf(message, 1023, str, args);
> > +
> > + qemu_plugin_outs(message);
> > +
> > + va_end(args);
> > +}
> > +
> > +void before_insn_cb(unsigned int cpu_index, void *udata)
> > +{
> > + uint64_t pc = (uint64_t)udata;
> > + qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
> > +}
> > +
> > +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
>
> Could you please break the line to avoid checkpatch errors:
>
> ERROR: line over 90 characters
> #63: FILE: contrib/plugins/stxp-plugin.c:25:
> +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo,
> uint64_t va, void *udata)
>
> ERROR: line over 90 characters
> #77: FILE: contrib/plugins/stxp-plugin.c:39:
> + qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb,
> QEMU_PLUGIN_CB_R_REGS, (void *)pc);
>
> ERROR: line over 90 characters
> #78: FILE: contrib/plugins/stxp-plugin.c:40:
> + qemu_plugin_register_vcpu_mem_cb(insn, mem_cb,
> QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
>
> ERROR: "(foo*)" should be "(foo *)"
> #78: FILE: contrib/plugins/stxp-plugin.c:40:
> + qemu_plugin_register_vcpu_mem_cb(insn, mem_cb,
> QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
>
> total: 4 errors, 1 warnings, 92 lines checked
For whatever it's worth, I don't think Alex's intention is to upstream
this code.
-Aaron
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
2022-01-25 8:17 ` Thomas Huth
@ 2022-02-01 15:00 ` Aaron Lindsay via
2022-02-01 15:29 ` Alex Bennée
1 sibling, 1 reply; 40+ messages in thread
From: Aaron Lindsay via @ 2022-02-01 15:00 UTC (permalink / raw)
To: Alex Bennée
Cc: qemu-devel, minyihh, ma.mandourr, Luke.Craig, cota, kuhn.chenqun,
robhenry, mahmoudabdalghany, Alexandre Iooss, Peter Maydell,
open list:ARM TCG CPUs
On Jan 24 20:15, Alex Bennée wrote:
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
> Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
>
> ---
> [AJB] this was for testing, I think you can show the same stuff with
> the much more complete execlog now.
Is it true that execlog can also reproduce the duplicate loads which are
still an outstanding issue?
-Aaron
> ---
> contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
> tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
> contrib/plugins/Makefile | 1 +
> tests/tcg/aarch64/Makefile.target | 3 ++
> 4 files changed, 82 insertions(+)
> create mode 100644 contrib/plugins/stxp-plugin.c
> create mode 100644 tests/tcg/aarch64/stxp.c
>
> diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
> new file mode 100644
> index 0000000000..432cf8c1ed
> --- /dev/null
> +++ b/contrib/plugins/stxp-plugin.c
> @@ -0,0 +1,50 @@
> +#include <stdio.h>
> +#include <stdarg.h>
> +#include <qemu-plugin.h>
> +
> +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
> +
> +void qemu_logf(const char *str, ...)
> +{
> + char message[1024];
> + va_list args;
> + va_start(args, str);
> + vsnprintf(message, 1023, str, args);
> +
> + qemu_plugin_outs(message);
> +
> + va_end(args);
> +}
> +
> +void before_insn_cb(unsigned int cpu_index, void *udata)
> +{
> + uint64_t pc = (uint64_t)udata;
> + qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
> +}
> +
> +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
> +{
> + uint64_t pc = (uint64_t)udata;
> + qemu_logf("PC 0x%" PRIx64 " accessed memory at 0x%" PRIx64 "\n", pc, va);
> +}
> +
> +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
> +{
> + size_t n = qemu_plugin_tb_n_insns(tb);
> +
> + for (size_t i = 0; i < n; i++) {
> + struct qemu_plugin_insn *insn = qemu_plugin_tb_get_insn(tb, i);
> + uint64_t pc = qemu_plugin_insn_vaddr(insn);
> +
> + qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb, QEMU_PLUGIN_CB_R_REGS, (void *)pc);
> + qemu_plugin_register_vcpu_mem_cb(insn, mem_cb, QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
> + }
> +}
> +
> +QEMU_PLUGIN_EXPORT
> +int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
> + int argc, char **argv)
> +{
> + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
> + return 0;
> +}
> diff --git a/tests/tcg/aarch64/stxp.c b/tests/tcg/aarch64/stxp.c
> new file mode 100644
> index 0000000000..fb8ef6a46d
> --- /dev/null
> +++ b/tests/tcg/aarch64/stxp.c
> @@ -0,0 +1,28 @@
> +
> +
> +void stxp_issue_demo(void *arr)
> +{
> + asm(".align 8\n\t"
> + " mov x0, %[in]\n\t"
> + " mov x18, 0x1000\n\t"
> + " mov x2, 0x0\n\t"
> + " mov x3, 0x0\n\t"
> + "loop:\n\t"
> + " prfm pstl1strm, [x0]\n\t"
> + " ldxp x16, x17, [x0]\n\t"
> + " stxp w16, x2, x3, [x0]\n\t"
> + "\n\t"
> + " subs x18, x18, 1\n\t"
> + " beq done\n\t"
> + " b loop\n\t"
> + "done:\n\t"
> + : /* none out */
> + : [in] "r" (arr) /* in */
> + : "x0", "x2", "x3", "x16", "x17", "x18"); /* clobbers */
> +}
> +
> +int main()
> +{
> + char arr[16];
> + stxp_issue_demo(&arr);
> +}
> diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
> index 54ac5ccd9f..576ed5875a 100644
> --- a/contrib/plugins/Makefile
> +++ b/contrib/plugins/Makefile
> @@ -20,6 +20,7 @@ NAMES += howvec
> NAMES += lockstep
> NAMES += hwprofile
> NAMES += cache
> +NAMES += stxp-plugin
>
> SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
>
> diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
> index 1d967901bd..54b2e90d00 100644
> --- a/tests/tcg/aarch64/Makefile.target
> +++ b/tests/tcg/aarch64/Makefile.target
> @@ -72,4 +72,7 @@ endif
>
> endif
>
> +# Load/Store exclusive test
> +AARCH64_TESTS += stxp
> +
> TESTS += $(AARCH64_TESTS)
> --
> 2.30.2
>
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-02-01 15:00 ` Aaron Lindsay via
@ 2022-02-01 15:29 ` Alex Bennée
2022-02-02 14:17 ` Aaron Lindsay via
0 siblings, 1 reply; 40+ messages in thread
From: Alex Bennée @ 2022-02-01 15:29 UTC (permalink / raw)
To: Aaron Lindsay
Cc: Peter Maydell, qemu-devel, robhenry, mahmoudabdalghany, minyihh,
cota, Luke.Craig, Alexandre Iooss, kuhn.chenqun, ma.mandourr,
open list:ARM TCG CPUs
Aaron Lindsay <aaron@os.amperecomputing.com> writes:
> On Jan 24 20:15, Alex Bennée wrote:
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
>> Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
>>
>> ---
>> [AJB] this was for testing, I think you can show the same stuff with
>> the much more complete execlog now.
>
> Is it true that execlog can also reproduce the duplicate loads which are
> still an outstanding issue?
Are we still seeing duplicate loads? I thought that had been fixed.
>
> -Aaron
>
>> ---
>> contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
>> tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
>> contrib/plugins/Makefile | 1 +
>> tests/tcg/aarch64/Makefile.target | 3 ++
>> 4 files changed, 82 insertions(+)
>> create mode 100644 contrib/plugins/stxp-plugin.c
>> create mode 100644 tests/tcg/aarch64/stxp.c
>>
>> diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
>> new file mode 100644
>> index 0000000000..432cf8c1ed
>> --- /dev/null
>> +++ b/contrib/plugins/stxp-plugin.c
>> @@ -0,0 +1,50 @@
>> +#include <stdio.h>
>> +#include <stdarg.h>
>> +#include <qemu-plugin.h>
>> +
>> +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
>> +
>> +void qemu_logf(const char *str, ...)
>> +{
>> + char message[1024];
>> + va_list args;
>> + va_start(args, str);
>> + vsnprintf(message, 1023, str, args);
>> +
>> + qemu_plugin_outs(message);
>> +
>> + va_end(args);
>> +}
>> +
>> +void before_insn_cb(unsigned int cpu_index, void *udata)
>> +{
>> + uint64_t pc = (uint64_t)udata;
>> + qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
>> +}
>> +
>> +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
>> +{
>> + uint64_t pc = (uint64_t)udata;
>> + qemu_logf("PC 0x%" PRIx64 " accessed memory at 0x%" PRIx64 "\n", pc, va);
>> +}
>> +
>> +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>> +{
>> + size_t n = qemu_plugin_tb_n_insns(tb);
>> +
>> + for (size_t i = 0; i < n; i++) {
>> + struct qemu_plugin_insn *insn = qemu_plugin_tb_get_insn(tb, i);
>> + uint64_t pc = qemu_plugin_insn_vaddr(insn);
>> +
>> + qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb, QEMU_PLUGIN_CB_R_REGS, (void *)pc);
>> + qemu_plugin_register_vcpu_mem_cb(insn, mem_cb, QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
>> + }
>> +}
>> +
>> +QEMU_PLUGIN_EXPORT
>> +int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
>> + int argc, char **argv)
>> +{
>> + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>> + return 0;
>> +}
>> diff --git a/tests/tcg/aarch64/stxp.c b/tests/tcg/aarch64/stxp.c
>> new file mode 100644
>> index 0000000000..fb8ef6a46d
>> --- /dev/null
>> +++ b/tests/tcg/aarch64/stxp.c
>> @@ -0,0 +1,28 @@
>> +
>> +
>> +void stxp_issue_demo(void *arr)
>> +{
>> + asm(".align 8\n\t"
>> + " mov x0, %[in]\n\t"
>> + " mov x18, 0x1000\n\t"
>> + " mov x2, 0x0\n\t"
>> + " mov x3, 0x0\n\t"
>> + "loop:\n\t"
>> + " prfm pstl1strm, [x0]\n\t"
>> + " ldxp x16, x17, [x0]\n\t"
>> + " stxp w16, x2, x3, [x0]\n\t"
>> + "\n\t"
>> + " subs x18, x18, 1\n\t"
>> + " beq done\n\t"
>> + " b loop\n\t"
>> + "done:\n\t"
>> + : /* none out */
>> + : [in] "r" (arr) /* in */
>> + : "x0", "x2", "x3", "x16", "x17", "x18"); /* clobbers */
>> +}
>> +
>> +int main()
>> +{
>> + char arr[16];
>> + stxp_issue_demo(&arr);
>> +}
>> diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
>> index 54ac5ccd9f..576ed5875a 100644
>> --- a/contrib/plugins/Makefile
>> +++ b/contrib/plugins/Makefile
>> @@ -20,6 +20,7 @@ NAMES += howvec
>> NAMES += lockstep
>> NAMES += hwprofile
>> NAMES += cache
>> +NAMES += stxp-plugin
>>
>> SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
>>
>> diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
>> index 1d967901bd..54b2e90d00 100644
>> --- a/tests/tcg/aarch64/Makefile.target
>> +++ b/tests/tcg/aarch64/Makefile.target
>> @@ -72,4 +72,7 @@ endif
>>
>> endif
>>
>> +# Load/Store exclusive test
>> +AARCH64_TESTS += stxp
>> +
>> TESTS += $(AARCH64_TESTS)
>> --
>> 2.30.2
>>
--
Alex Bennée
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream)
2022-02-01 15:29 ` Alex Bennée
@ 2022-02-02 14:17 ` Aaron Lindsay via
0 siblings, 0 replies; 40+ messages in thread
From: Aaron Lindsay via @ 2022-02-02 14:17 UTC (permalink / raw)
To: Alex Bennée
Cc: qemu-devel, minyihh, ma.mandourr, Luke.Craig, cota, kuhn.chenqun,
robhenry, mahmoudabdalghany, Alexandre Iooss, Peter Maydell,
open list:ARM TCG CPUs
On Feb 01 15:29, Alex Bennée wrote:
>
> Aaron Lindsay <aaron@os.amperecomputing.com> writes:
>
> > On Jan 24 20:15, Alex Bennée wrote:
> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> >> Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
> >> Message-ID: <YXCA62xdRDeueQR6@strawberry.localdomain>
> >>
> >> ---
> >> [AJB] this was for testing, I think you can show the same stuff with
> >> the much more complete execlog now.
> >
> > Is it true that execlog can also reproduce the duplicate loads which are
> > still an outstanding issue?
>
> Are we still seeing duplicate loads? I thought that had been fixed.
I have not explicitly tested for the duplicate loads on atomics lately
(though I have seen some transient behavior related to atomics that I
have struggled to reliably reproduce, but I believe that's a different
issue). I hadn't seen a subsequent fix come through after the initial
fix for stores and assumed it was still an issue. Sorry for my
assumption, particularly if I just missed it.
-Aaron
> >> ---
> >> contrib/plugins/stxp-plugin.c | 50 +++++++++++++++++++++++++++++++
> >> tests/tcg/aarch64/stxp.c | 28 +++++++++++++++++
> >> contrib/plugins/Makefile | 1 +
> >> tests/tcg/aarch64/Makefile.target | 3 ++
> >> 4 files changed, 82 insertions(+)
> >> create mode 100644 contrib/plugins/stxp-plugin.c
> >> create mode 100644 tests/tcg/aarch64/stxp.c
> >>
> >> diff --git a/contrib/plugins/stxp-plugin.c b/contrib/plugins/stxp-plugin.c
> >> new file mode 100644
> >> index 0000000000..432cf8c1ed
> >> --- /dev/null
> >> +++ b/contrib/plugins/stxp-plugin.c
> >> @@ -0,0 +1,50 @@
> >> +#include <stdio.h>
> >> +#include <stdarg.h>
> >> +#include <qemu-plugin.h>
> >> +
> >> +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
> >> +
> >> +void qemu_logf(const char *str, ...)
> >> +{
> >> + char message[1024];
> >> + va_list args;
> >> + va_start(args, str);
> >> + vsnprintf(message, 1023, str, args);
> >> +
> >> + qemu_plugin_outs(message);
> >> +
> >> + va_end(args);
> >> +}
> >> +
> >> +void before_insn_cb(unsigned int cpu_index, void *udata)
> >> +{
> >> + uint64_t pc = (uint64_t)udata;
> >> + qemu_logf("Executing PC: 0x%" PRIx64 "\n", pc);
> >> +}
> >> +
> >> +static void mem_cb(unsigned int cpu_index, qemu_plugin_meminfo_t meminfo, uint64_t va, void *udata)
> >> +{
> >> + uint64_t pc = (uint64_t)udata;
> >> + qemu_logf("PC 0x%" PRIx64 " accessed memory at 0x%" PRIx64 "\n", pc, va);
> >> +}
> >> +
> >> +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
> >> +{
> >> + size_t n = qemu_plugin_tb_n_insns(tb);
> >> +
> >> + for (size_t i = 0; i < n; i++) {
> >> + struct qemu_plugin_insn *insn = qemu_plugin_tb_get_insn(tb, i);
> >> + uint64_t pc = qemu_plugin_insn_vaddr(insn);
> >> +
> >> + qemu_plugin_register_vcpu_insn_exec_cb(insn, before_insn_cb, QEMU_PLUGIN_CB_R_REGS, (void *)pc);
> >> + qemu_plugin_register_vcpu_mem_cb(insn, mem_cb, QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_MEM_RW, (void*)pc);
> >> + }
> >> +}
> >> +
> >> +QEMU_PLUGIN_EXPORT
> >> +int qemu_plugin_install(qemu_plugin_id_t id, const qemu_info_t *info,
> >> + int argc, char **argv)
> >> +{
> >> + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
> >> + return 0;
> >> +}
> >> diff --git a/tests/tcg/aarch64/stxp.c b/tests/tcg/aarch64/stxp.c
> >> new file mode 100644
> >> index 0000000000..fb8ef6a46d
> >> --- /dev/null
> >> +++ b/tests/tcg/aarch64/stxp.c
> >> @@ -0,0 +1,28 @@
> >> +
> >> +
> >> +void stxp_issue_demo(void *arr)
> >> +{
> >> + asm(".align 8\n\t"
> >> + " mov x0, %[in]\n\t"
> >> + " mov x18, 0x1000\n\t"
> >> + " mov x2, 0x0\n\t"
> >> + " mov x3, 0x0\n\t"
> >> + "loop:\n\t"
> >> + " prfm pstl1strm, [x0]\n\t"
> >> + " ldxp x16, x17, [x0]\n\t"
> >> + " stxp w16, x2, x3, [x0]\n\t"
> >> + "\n\t"
> >> + " subs x18, x18, 1\n\t"
> >> + " beq done\n\t"
> >> + " b loop\n\t"
> >> + "done:\n\t"
> >> + : /* none out */
> >> + : [in] "r" (arr) /* in */
> >> + : "x0", "x2", "x3", "x16", "x17", "x18"); /* clobbers */
> >> +}
> >> +
> >> +int main()
> >> +{
> >> + char arr[16];
> >> + stxp_issue_demo(&arr);
> >> +}
> >> diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile
> >> index 54ac5ccd9f..576ed5875a 100644
> >> --- a/contrib/plugins/Makefile
> >> +++ b/contrib/plugins/Makefile
> >> @@ -20,6 +20,7 @@ NAMES += howvec
> >> NAMES += lockstep
> >> NAMES += hwprofile
> >> NAMES += cache
> >> +NAMES += stxp-plugin
> >>
> >> SONAMES := $(addsuffix .so,$(addprefix lib,$(NAMES)))
> >>
> >> diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
> >> index 1d967901bd..54b2e90d00 100644
> >> --- a/tests/tcg/aarch64/Makefile.target
> >> +++ b/tests/tcg/aarch64/Makefile.target
> >> @@ -72,4 +72,7 @@ endif
> >>
> >> endif
> >>
> >> +# Load/Store exclusive test
> >> +AARCH64_TESTS += stxp
> >> +
> >> TESTS += $(AARCH64_TESTS)
> >> --
> >> 2.30.2
> >>
>
>
> --
> Alex Bennée
^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2022-02-02 15:53 UTC | newest]
Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-24 20:15 [PATCH v1 00/22] testing and plugin updates Alex Bennée
2022-01-24 20:15 ` [PATCH v1 01/22] tests/Makefile.include: clean-up old code Alex Bennée
2022-01-24 20:38 ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 02/22] tests/qtest: enable more vhost-user tests by default Alex Bennée
2022-01-25 8:18 ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 03/22] Makefile: also remove .gcno files when cleaning Alex Bennée
2022-01-25 7:40 ` Thomas Huth
2022-01-24 20:15 ` [PATCH v1 04/22] .gitignore: add .gcov pattern Alex Bennée
2022-01-24 20:38 ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 05/22] MAINTAINERS: Cover lcitool submodule with build test / automation Alex Bennée
2022-01-24 20:15 ` [PATCH v1 06/22] gitmodules: Correct libvirt-ci submodule URL Alex Bennée
2022-01-24 20:15 ` [PATCH v1 07/22] tests/lcitool: Include local qemu.yml when refreshing cirrus-ci files Alex Bennée
2022-01-24 20:15 ` [PATCH v1 08/22] drop libxml2 checks since libxml is not actually used (for parallels) Alex Bennée
2022-01-25 21:29 ` Vladimir Sementsov-Ogievskiy
2022-01-24 20:15 ` [PATCH v1 09/22] tests/lcitool: Refresh submodule and remove libxml2 Alex Bennée
2022-01-25 10:23 ` Thomas Huth
2022-01-25 10:48 ` Philippe Mathieu-Daudé via
2022-01-24 20:15 ` [PATCH v1 10/22] tests: Manually remove libxml2 on MSYS2 runners Alex Bennée
2022-01-24 20:15 ` [PATCH v1 11/22] tests/lcitool: Install libibumad to cover RDMA on Debian based distros Alex Bennée
2022-01-24 20:15 ` [PATCH v1 12/22] plugins: stxp test case from Aaron (!upstream) Alex Bennée
2022-01-25 8:17 ` Thomas Huth
2022-02-01 14:58 ` Aaron Lindsay via
2022-02-01 15:00 ` Aaron Lindsay via
2022-02-01 15:29 ` Alex Bennée
2022-02-02 14:17 ` Aaron Lindsay via
2022-01-24 20:15 ` [PATCH v1 13/22] docs: remove references to TCG tracing Alex Bennée
2022-01-24 20:16 ` [PATCH v1 14/22] tracing: remove TCG memory access tracing Alex Bennée
2022-01-24 22:06 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 15/22] tracing: remove the trace-tcg includes from the build Alex Bennée
2022-01-24 22:07 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 16/22] tracing: excise the tcg related from tracetool Alex Bennée
2022-01-24 20:16 ` [PATCH v1 17/22] plugins: add helper functions for coverage plugins Alex Bennée
2022-01-24 20:16 ` [PATCH v1 18/22] contrib/plugins: add a drcov plugin Alex Bennée
2022-01-24 20:16 ` [PATCH v1 19/22] tests/plugin: allow libinsn.so per-CPU counts Alex Bennée
2022-01-24 20:16 ` [PATCH v1 20/22] tests/plugins: add instruction matching to libinsn.so Alex Bennée
2022-01-24 22:13 ` Philippe Mathieu-Daudé via
2022-01-24 20:16 ` [PATCH v1 21/22] target/i386: use CPU_LOG_INT for IRQ servicing Alex Bennée
2022-01-24 22:14 ` Philippe Mathieu-Daudé via
2022-01-26 21:33 ` Richard Henderson
2022-01-24 20:16 ` [PATCH v1 22/22] plugins: move reset of plugin data to tb_start Alex Bennée
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.