Commit 243f6bf6be for qemu.org
commit 243f6bf6be802f93db55701704c3eaccb9eaa960
Author: Daniel P. Berrangé <berrange@redhat.com>
Date: Mon Nov 2 14:28:35 2026 +0000
trace: eliminate dupe trace_event_get_state_dynamic_by_id() calls
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.
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20261102142844.3464712-17-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py
index 9109a783c7..72f549c77c 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 e304ef2199..94cffc45a9 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 9e3e5046f5..577ee15858 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 e22683c7d2..15f27e26bd 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 746efd35fb..ba269cb6a3 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 6ffb7256e3..5ad3a419f8 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 41fa4d0e8a..5627c1d893 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 */