From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PATCH v3 16/24] trace: eliminate dupe trace_event_get_state_dynamic_by_id() calls
Date: Mon, 5 Oct 2026 13:08:47 +0100 [thread overview]
Message-ID: <20261005120855.421973-17-berrange@redhat.com> (raw)
In-Reply-To: <20261005120855.421973-1-berrange@redhat.com>
Each backend generates the same trace_event_get_state_dynamic_by_id()
call for the TRACE....DSTATE() macro body, so when multiple backends
are enabled, the same check is repeated:
#define TRACE_TEST_WIBBLE_BACKEND_DSTATE() ( \
QEMU_TEST_WIBBLE_ENABLED() || \
trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
tracepoint_enabled(qemu, test_wibble) || \
false)
Expanding the use of the 'backend.check_trace_event_get_state'
attr in the C header generator removes the duplication, in the
same way that the Rust generator already does.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
scripts/tracetool/backend/__init__.py | 4 ++--
scripts/tracetool/backend/ftrace.py | 4 ----
scripts/tracetool/backend/log.py | 4 ----
scripts/tracetool/backend/simple.py | 5 -----
scripts/tracetool/backend/syslog.py | 4 ----
scripts/tracetool/format/h.py | 8 +++++++-
tests/tracetool/all.h | 22 ++++++++--------------
7 files changed, 17 insertions(+), 34 deletions(-)
diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py
index 9109a783c72..72f549c77c4 100644
--- a/scripts/tracetool/backend/__init__.py
+++ b/scripts/tracetool/backend/__init__.py
@@ -133,8 +133,8 @@ def generate_begin(self, events, group):
def generate(self, event, group, check_trace_event_get_state=None):
self._run_function("generate_%s", event, group, check_trace_event_get_state=check_trace_event_get_state)
- def generate_backend_dstate(self, event, group):
- self._run_function("generate_%s_backend_dstate", event, group)
+ def generate_backend_dstate(self, event, group, check_trace_event_get_state=None):
+ self._run_function("generate_%s_backend_dstate", event, group, check_trace_event_get_state=check_trace_event_get_state)
def generate_end(self, events, group):
self._run_function("generate_%s_end", events, group)
diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/backend/ftrace.py
index e304ef21999..94cffc45a9d 100644
--- a/scripts/tracetool/backend/ftrace.py
+++ b/scripts/tracetool/backend/ftrace.py
@@ -40,10 +40,6 @@ def generate_h(event, group):
argnames=argnames)
-def generate_h_backend_dstate(event, group):
- out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
- event_id="TRACE_" + event.name.upper())
-
def generate_rs(event, group):
out(' let format_string = c"%(fmt)s\\n";',
' unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, %(args)s);}',
diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend/log.py
index 9e3e5046f5f..577ee158584 100644
--- a/scripts/tracetool/backend/log.py
+++ b/scripts/tracetool/backend/log.py
@@ -41,10 +41,6 @@ def generate_h(event, group):
argnames=argnames)
-def generate_h_backend_dstate(event, group):
- out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
- event_id="TRACE_" + event.name.upper())
-
def generate_rs(event, group):
out(' let format_string = c"%(fmt)s\\n";',
' if (unsafe { bindings::qemu_loglevel } & bindings::LOG_TRACE) != 0 {',
diff --git a/scripts/tracetool/backend/simple.py b/scripts/tracetool/backend/simple.py
index e22683c7d2a..15f27e26bd5 100644
--- a/scripts/tracetool/backend/simple.py
+++ b/scripts/tracetool/backend/simple.py
@@ -42,11 +42,6 @@ def generate_h(event, group):
args=", ".join(event.args.names()))
-def generate_h_backend_dstate(event, group):
- out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
- event_id="TRACE_" + event.name.upper())
-
-
def generate_c_begin(events, group):
out('#include "trace/simple.h"',
'')
diff --git a/scripts/tracetool/backend/syslog.py b/scripts/tracetool/backend/syslog.py
index 746efd35fb9..ba269cb6a33 100644
--- a/scripts/tracetool/backend/syslog.py
+++ b/scripts/tracetool/backend/syslog.py
@@ -43,7 +43,3 @@ def generate_rs(event, group):
' unsafe {::trace::syslog(::trace::LOG_INFO, format_string.as_ptr() as *const c_char, %(args)s);}',
fmt=expand_format_string(event.fmt, event.name + " "),
args=event.args.rust_call_varargs())
-
-def generate_h_backend_dstate(event, group):
- out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
- event_id="TRACE_" + event.name.upper())
diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py
index 6ffb7256e31..5ad3a419f82 100644
--- a/scripts/tracetool/format/h.py
+++ b/scripts/tracetool/format/h.py
@@ -55,7 +55,13 @@ def generate(events, backend, group):
api=e.api(e.QEMU_BACKEND_DSTATE))
if "disable" not in e.properties:
- backend.generate_backend_dstate(e, group)
+ backend.generate_backend_dstate(e, group, check_trace_event_get_state=False)
+
+ if backend.check_trace_event_get_state:
+ event_id = 'TRACE_' + e.name.upper()
+ out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
+ event_id=event_id)
+ backend.generate_backend_dstate(e, group, check_trace_event_get_state=True)
out(' false)')
diff --git a/tests/tracetool/all.h b/tests/tracetool/all.h
index 41fa4d0e8a2..5627c1d8930 100644
--- a/tests/tracetool/all.h
+++ b/tests/tracetool/all.h
@@ -44,11 +44,8 @@ void _simple_trace_test_wibble(void *context, int value);
#define TRACE_TEST_BLAH_BACKEND_DSTATE() ( \
QEMU_TEST_BLAH_ENABLED() || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
tracepoint_enabled(qemu, test_blah) || \
+ trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
false)
static inline void trace_test_blah(void *context, const char *filename)
@@ -58,26 +55,23 @@ static inline void trace_test_blah(void *context, const char *filename)
if (trace_event_get_state(TRACE_TEST_BLAH)) {
#line 4 "trace-events"
ftrace_write("test_blah " "Blah context=%p filename=%s" "\n" , context, filename);
-#line 62 "all.h"
+#line 59 "all.h"
if (qemu_loglevel_mask(LOG_TRACE)) {
#line 4 "trace-events"
qemu_log("test_blah " "Blah context=%p filename=%s" "\n", context, filename);
-#line 66 "all.h"
+#line 63 "all.h"
}
_simple_trace_test_blah(context, filename);
#line 4 "trace-events"
syslog(LOG_INFO, "test_blah " "Blah context=%p filename=%s" , context, filename);
-#line 71 "all.h"
+#line 68 "all.h"
}
}
#define TRACE_TEST_WIBBLE_BACKEND_DSTATE() ( \
QEMU_TEST_WIBBLE_ENABLED() || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
- trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
tracepoint_enabled(qemu, test_wibble) || \
+ trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
false)
static inline void trace_test_wibble(void *context, int value)
@@ -87,16 +81,16 @@ static inline void trace_test_wibble(void *context, int value)
if (trace_event_get_state(TRACE_TEST_WIBBLE)) {
#line 5 "trace-events"
ftrace_write("test_wibble " "Wibble context=%p value=%d" "\n" , context, value);
-#line 91 "all.h"
+#line 85 "all.h"
if (qemu_loglevel_mask(LOG_TRACE)) {
#line 5 "trace-events"
qemu_log("test_wibble " "Wibble context=%p value=%d" "\n", context, value);
-#line 95 "all.h"
+#line 89 "all.h"
}
_simple_trace_test_wibble(context, value);
#line 5 "trace-events"
syslog(LOG_INFO, "test_wibble " "Wibble context=%p value=%d" , context, value);
-#line 100 "all.h"
+#line 94 "all.h"
}
}
#endif /* TRACE_TESTSUITE_GENERATED_TRACERS_H */
--
2.55.0
next prev parent reply other threads:[~2026-10-05 12:11 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 12:08 [PATCH v3 00/24] trace: bugfixes, cleanups and optimizations Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 01/24] osdep: add 'ignore_value(x)' macro Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 02/24] trace: use 'ignore_value()' instead of a dummy variable Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 03/24] trace: fix handling of char** in UST backend Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 04/24] hw/xen: replace "long unsigned int" with "unsigned long " for dtrace Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 05/24] trace: block use of "long int" " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 06/24] trace: drop unused trace_event_set_state_dynamic_init() Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 07/24] trace: remove obsolete references to vcpu property Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 08/24] trace: drop 'id' from TraceEvent struct when not required Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 09/24] trace: change "DSTATE" variables from uint16_t to uint8_t Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 10/24] trace: add testing of 'nop' trace backend Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 11/24] trace: don't emit TraceEvent structs when 'nop' backend is used Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 12/24] trace: add test of generation with all backends enabled Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 13/24] trace: remove redundant headers from simple trace backend code Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 14/24] trace: include probe name in Rust format strings Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 15/24] trace: add missing newline in ftrace Rust format string Daniel P. Berrangé
2026-10-05 12:08 ` Daniel P. Berrangé [this message]
2026-10-05 12:08 ` [PATCH v3 17/24] audio: remove mistaken use of trace_event_get_state() Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 18/24] hw/ppc: " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 19/24] monitor: " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 20/24] trace: include qemu_loglevel_mask(LOG_TRACE) in guard Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 21/24] trace: remove "disable" property from trace files Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 22/24] trace: stop tracking static disabled state Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 23/24] trace: remove parsing of "disable" event property Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 24/24] trace: remove 'trace_event_get_state' wrapper Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261005120855.421973-17-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.