Commit 6d9f20e060 for qemu.org
commit 6d9f20e060bc3167a0a52c31f503328fe0e05fbb
Author: Daniel P. Berrangé <berrange@redhat.com>
Date: Mon Nov 2 14:28:43 2026 +0000
trace: remove parsing of "disable" event property
Finish the removal of the "disable" event property by removing code
that parses properties and the backend code generators.
This "fixes" a bug in the UST backends which looked for a property
called "disabled" instead of "disable".
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20261102142844.3464712-25-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
diff --git a/docs/devel/tracing.rst b/docs/devel/tracing.rst
index f4557ee20e..4bc344f033 100644
--- a/docs/devel/tracing.rst
+++ b/docs/devel/tracing.rst
@@ -230,9 +230,6 @@ The "nop" backend generates empty trace event functions so that the compiler
can optimize out trace events completely. This imposes no performance
penalty.
-Note that regardless of the selected trace backend, events with the "disable"
-property will be generated with the "nop" backend.
-
Log
---
@@ -366,30 +363,14 @@ To facilitate simple usage of systemtap where there merely needs to be printf
logging of certain probes, a helper script "qemu-trace-stap" is provided.
Consult its manual page for guidance on its usage.
-Trace event properties
+Trace event conditions
======================
-Each event in the "trace-events-all" file can be prefixed with a space-separated
-list of zero or more of the following event properties.
-
-"disable"
----------
-
-If a specific trace event is going to be invoked a huge number of times, this
-might have a noticeable performance impact even when the event is
-programmatically disabled.
-
-In this case you should declare such event with the "disable" property. This
-will effectively disable the event at compile time (by using the "nop" backend),
-thus having no performance impact at all on regular builds (i.e., unless you
-edit the "trace-events-all" file).
-
-In addition, there might be cases where relatively complex computations must be
+There might be cases where relatively complex computations must be
performed to generate values that are only used as arguments for a trace
function. In these cases you can use 'trace_event_get_state_backends()' to
-guard such computations, so they are skipped if the event has been either
-compile-time disabled or run-time disabled. If the event is compile-time
-disabled, this check will have no performance impact.
+guard such computations, so they are skipped if the event is not currently
+enabled:
::
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 6ed7cdd6ce..bdbb06b520 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -362,8 +362,6 @@ class Event(object):
The event name.
fmt : str
The event format string.
- properties : set(str)
- Properties of the event.
args : Arguments
The event arguments.
lineno : int
@@ -373,23 +371,18 @@ class Event(object):
"""
- _CRE = re.compile(r"((?P<props>[\w\s]+)\s+)?"
- r"(?P<name>\w+)"
+ _CRE = re.compile(r"(?P<name>\w+)"
r"\((?P<args>[^)]*)\)"
r"\s*"
r"(?P<fmt>\".+)?"
r"\s*")
- _VALID_PROPS = set(["disable"])
-
- def __init__(self, name, props, fmt, args, lineno, filename):
+ def __init__(self, name, fmt, args, lineno, filename):
"""
Parameters
----------
name : string
Event name.
- props : list of str
- Property names.
fmt : str
Event printing format string.
args : Arguments
@@ -401,7 +394,6 @@ def __init__(self, name, props, fmt, args, lineno, filename):
"""
self.name = name
- self.properties = props
self.fmt = fmt
self.args = args
self.lineno = int(lineno)
@@ -411,11 +403,6 @@ def __init__(self, name, props, fmt, args, lineno, filename):
raise ValueError("Event '%s' has more than maximum permitted "
"argument count" % name)
- unknown_props = set(self.properties) - self._VALID_PROPS
- if len(unknown_props) > 0:
- raise ValueError("Unknown properties: %s"
- % ", ".join(unknown_props))
-
@staticmethod
def build(line_str, lineno, filename):
@@ -435,7 +422,6 @@ def build(line_str, lineno, filename):
groups = m.groupdict('')
name = groups["name"]
- props = groups["props"].split()
fmt = groups["fmt"]
if fmt.find("%m") != -1:
raise ValueError("Event format '%m' is forbidden, pass the error "
@@ -448,14 +434,13 @@ def build(line_str, lineno, filename):
args = Arguments.build(groups["args"])
- return Event(name, props, fmt, args, lineno, posix_relpath(filename))
+ return Event(name, fmt, args, lineno, posix_relpath(filename))
def __repr__(self):
"""Evaluable string representation for this object."""
- return "Event('%s %s(%s) %s')" % (" ".join(self.properties),
- self.name,
- self.args,
- self.fmt)
+ return "Event('%s(%s) %s')" % (self.name,
+ self.args,
+ self.fmt)
# Star matching on PRI is dangerous as one might have multiple
# arguments with that format, hence the non-greedy version of it.
_FMT = re.compile(r"(%[\d\.]*\w+|%.*?PRI\S+)")
diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py
index f0b58cc158..6bce25c8d2 100644
--- a/scripts/tracetool/backend/dtrace.py
+++ b/scripts/tracetool/backend/dtrace.py
@@ -79,8 +79,6 @@ def generate_rs_begin(events, group):
# These are the Rust declarations of the .probes section semaphores
# generated by dtrace(1) in its .o file output.
for e in events:
- if 'disable' in e.properties:
- continue
out(' #[allow(dead_code)]',
f' static qemu_{e.name}_semaphore: UnsafeCell<u16>;')
out('}',
diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
index 9f06894623..3754c7e06f 100644
--- a/scripts/tracetool/format/c.py
+++ b/scripts/tracetool/format/c.py
@@ -16,9 +16,6 @@
def generate(events, backend, group):
- active_events = [e for e in events
- if "disable" not in e.properties]
-
header = "trace-" + group + ".h"
out('/* This file is autogenerated by tracetool, do not edit. */',
@@ -62,7 +59,7 @@ def generate(events, backend, group):
'trace_init(trace_%(group)s_register_events)',
group = group.lower())
- backend.generate_begin(active_events, group)
- for event in active_events:
+ backend.generate_begin(events, group)
+ for event in events:
backend.generate(event, group)
- backend.generate_end(active_events, group)
+ backend.generate_end(events, group)
diff --git a/scripts/tracetool/format/d.py b/scripts/tracetool/format/d.py
index e9e33dfe30..df7780cb0a 100644
--- a/scripts/tracetool/format/d.py
+++ b/scripts/tracetool/format/d.py
@@ -30,9 +30,6 @@
def generate(events, backend, group):
- events = [e for e in events
- if "disable" not in e.properties]
-
# SystemTap's dtrace(1) warns about empty "provider qemu {}" but is happy
# with an empty file. Avoid the warning.
# But dtrace on macOS can't deal with empty files.
diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py
index 544bbc0ba9..f719fe0939 100644
--- a/scripts/tracetool/format/h.py
+++ b/scripts/tracetool/format/h.py
@@ -46,14 +46,13 @@ def generate(events, backend, group):
'#define %(api)s() ( \\',
api=e.api(e.QEMU_BACKEND_DSTATE))
- if "disable" not in e.properties:
- backend.generate_backend_dstate(e, group, check_trace_event_get_state=False)
+ 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)
+ 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)')
@@ -63,16 +62,15 @@ def generate(events, backend, group):
api=e.api(),
args=e.args)
- if "disable" not in e.properties:
- backend.generate(e, group, check_trace_event_get_state=False)
+ backend.generate(e, group, check_trace_event_get_state=False)
- if backend.check_trace_event_get_state:
- event_id = 'TRACE_' + e.name.upper()
- cond = "trace_event_get_state(%s)" % event_id
- out(' if (%(cond)s) {',
- cond=cond)
- backend.generate(e, group, check_trace_event_get_state=True)
- out(' }')
+ if backend.check_trace_event_get_state:
+ event_id = 'TRACE_' + e.name.upper()
+ cond = "trace_event_get_state(%s)" % event_id
+ out(' if (%(cond)s) {',
+ cond=cond)
+ backend.generate(e, group, check_trace_event_get_state=True)
+ out(' }')
out('}')
backend.generate_end(events, group)
diff --git a/scripts/tracetool/format/log_stap.py b/scripts/tracetool/format/log_stap.py
index 259303a189..3fa6c2dd3f 100644
--- a/scripts/tracetool/format/log_stap.py
+++ b/scripts/tracetool/format/log_stap.py
@@ -90,9 +90,6 @@ def generate(events, backend, group):
'')
for event_id, e in enumerate(events):
- if 'disable' in e.properties:
- continue
-
out('probe %(probeprefix)s.log.%(name)s = %(probeprefix)s.%(name)s ?',
'{',
probeprefix=probeprefix(),
diff --git a/scripts/tracetool/format/rs.py b/scripts/tracetool/format/rs.py
index 1fddcee1ad..97d89a981d 100644
--- a/scripts/tracetool/format/rs.py
+++ b/scripts/tracetool/format/rs.py
@@ -52,11 +52,10 @@ def generate(events, backend, group):
'{',
api=e.api(e.QEMU_RUST_DSTATE))
- if "disable" not in e.properties:
- backend.generate_backend_dstate(e, group)
- if backend.check_trace_event_get_state:
- out(' trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) ||',
- event_id = 'TRACE_' + e.name.upper())
+ backend.generate_backend_dstate(e, group)
+ if backend.check_trace_event_get_state:
+ out(' trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) ||',
+ event_id = 'TRACE_' + e.name.upper())
out(' false',
'}',
@@ -68,15 +67,14 @@ def generate(events, backend, group):
api=e.api(e.QEMU_TRACE),
args=e.args.rust_decl())
- if "disable" not in e.properties:
- backend.generate(e, group, check_trace_event_get_state=False)
- if backend.check_trace_event_get_state:
- event_id = 'TRACE_' + e.name.upper()
- out(' if trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) {',
- event_id = event_id,
- api=e.api())
- backend.generate(e, group, check_trace_event_get_state=True)
- out(' }')
+ backend.generate(e, group, check_trace_event_get_state=False)
+ if backend.check_trace_event_get_state:
+ event_id = 'TRACE_' + e.name.upper()
+ out(' if trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) {',
+ event_id = event_id,
+ api=e.api())
+ backend.generate(e, group, check_trace_event_get_state=True)
+ out(' }')
out('}',
'')
diff --git a/scripts/tracetool/format/simpletrace_stap.py b/scripts/tracetool/format/simpletrace_stap.py
index c7bde97a85..393d85319c 100644
--- a/scripts/tracetool/format/simpletrace_stap.py
+++ b/scripts/tracetool/format/simpletrace_stap.py
@@ -24,9 +24,6 @@ def generate(events, backend, group):
'')
for event_id, e in enumerate(events):
- if 'disable' in e.properties:
- continue
-
out('probe %(probeprefix)s.simpletrace.%(name)s = %(probeprefix)s.%(name)s ?',
'{',
probeprefix=probeprefix(),
diff --git a/scripts/tracetool/format/stap.py b/scripts/tracetool/format/stap.py
index 285c9203ba..e3d16b72d3 100644
--- a/scripts/tracetool/format/stap.py
+++ b/scripts/tracetool/format/stap.py
@@ -34,9 +34,6 @@ def stap_escape(identifier):
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. */',
'/* SPDX-License-Identifier: GPL-2.0-or-later */',
'')
diff --git a/scripts/tracetool/format/ust_events_c.py b/scripts/tracetool/format/ust_events_c.py
index 074226bfd3..93f88a03e9 100644
--- a/scripts/tracetool/format/ust_events_c.py
+++ b/scripts/tracetool/format/ust_events_c.py
@@ -16,9 +16,6 @@
def generate(events, backend, group):
- events = [e for e in events
- if "disabled" not in e.properties]
-
out('/* This file is autogenerated by tracetool, do not edit. */',
'/* SPDX-License-Identifier: GPL-2.0-or-later */',
'',
diff --git a/scripts/tracetool/format/ust_events_h.py b/scripts/tracetool/format/ust_events_h.py
index 76c883bc5c..441e6a4193 100644
--- a/scripts/tracetool/format/ust_events_h.py
+++ b/scripts/tracetool/format/ust_events_h.py
@@ -16,9 +16,6 @@
def generate(events, backend, group):
- events = [e for e in events
- if "disabled" not in e.properties]
-
if group == "all":
include = "trace-ust-all.h"
else: