From e02cda008591317b1625707ff8e115a4841aa889 Mon Sep 17 00:00:00 2001 From: Timos Ampelikiotis Date: Tue, 10 Oct 2023 11:40:56 +0000 Subject: Introduce Virtio-loopback epsilon release: Epsilon release introduces a new compatibility layer which make virtio-loopback design to work with QEMU and rust-vmm vhost-user backend without require any changes. Signed-off-by: Timos Ampelikiotis Change-Id: I52e57563e08a7d0bdc002f8e928ee61ba0c53dd9 --- scripts/tracetool/format/h.py | 103 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 scripts/tracetool/format/h.py (limited to 'scripts/tracetool/format/h.py') diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py new file mode 100644 index 000000000..e94f0be7d --- /dev/null +++ b/scripts/tracetool/format/h.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +""" +trace/generated-tracers.h +""" + +__author__ = "Lluís Vilanova " +__copyright__ = "Copyright 2012-2017, Lluís Vilanova " +__license__ = "GPL version 2 or (at your option) any later version" + +__maintainer__ = "Stefan Hajnoczi" +__email__ = "stefanha@redhat.com" + + +from tracetool import out + + +def generate(events, backend, group): + if group == "root": + header = "trace/control-vcpu.h" + else: + header = "trace/control.h" + + out('/* This file is autogenerated by tracetool, do not edit. */', + '', + '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(), + '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(), + '', + '#include "%s"' % header, + '') + + for e in events: + out('extern TraceEvent %(event)s;', + event = e.api(e.QEMU_EVENT)) + + for e in events: + out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE)) + + # static state + for e in events: + if 'disable' in e.properties: + enabled = 0 + else: + enabled = 1 + if "tcg-exec" in e.properties: + # a single define for the two "sub-events" + out('#define TRACE_%(name)s_ENABLED %(enabled)d', + name=e.original.name.upper(), + enabled=enabled) + out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) + + backend.generate_begin(events, group) + + for e in events: + # tracer-specific dstate + out('', + '#define %(api)s() ( \\', + api=e.api(e.QEMU_BACKEND_DSTATE)) + + if "disable" not in e.properties: + backend.generate_backend_dstate(e, group) + + out(' false)') + + # tracer without checks + out('', + 'static inline void %(api)s(%(args)s)', + '{', + api=e.api(e.QEMU_TRACE_NOCHECK), + args=e.args) + + if "disable" not in e.properties: + backend.generate(e, group) + + out('}') + + # tracer wrapper with checks (per-vCPU tracing) + if "vcpu" in e.properties: + trace_cpu = next(iter(e.args))[1] + cond = "trace_event_get_vcpu_state(%(cpu)s,"\ + " TRACE_%(id)s)"\ + % dict( + cpu=trace_cpu, + id=e.name.upper()) + else: + cond = "true" + + out('', + 'static inline void %(api)s(%(args)s)', + '{', + ' if (%(cond)s) {', + ' %(api_nocheck)s(%(names)s);', + ' }', + '}', + api=e.api(), + api_nocheck=e.api(e.QEMU_TRACE_NOCHECK), + args=e.args, + names=", ".join(e.args.names()), + cond=cond) + + backend.generate_end(events, group) + + out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper()) -- cgit