[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 14/20] trace: dynamically allocate event IDs at runti
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 14/20] trace: dynamically allocate event IDs at runtime |
Date: |
Fri, 7 Oct 2016 11:09:33 +0100 |
From: "Daniel P. Berrange" <address@hidden>
Instead of having the code generator assign event IDs and
event VCPU IDs, assign them when the events are registered
at runtime. This will allow code to be generated from
individual trace-events without having to figure out
globally unique numbering at build time.
Reviewed-by: Stefan Hajnoczi <address@hidden>
Reviewed-by: Lluís Vilanova <address@hidden>
Signed-off-by: Daniel P. Berrange <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
scripts/tracetool/format/events_c.py | 10 ++--------
scripts/tracetool/format/events_h.py | 4 ----
trace/control.c | 11 ++++++++++-
3 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/scripts/tracetool/format/events_c.py
b/scripts/tracetool/format/events_c.py
index 8817555..a976c22 100644
--- a/scripts/tracetool/format/events_c.py
+++ b/scripts/tracetool/format/events_c.py
@@ -28,25 +28,19 @@ def generate(events, backend):
for e in events:
out('uint16_t %s;' % e.api(e.QEMU_DSTATE))
- next_id = 0
- next_vcpu_id = 0
for e in events:
- id = next_id
- next_id += 1
if "vcpu" in e.properties:
- vcpu_id = next_vcpu_id
- next_vcpu_id += 1
+ vcpu_id = 0
else:
vcpu_id = "TRACE_VCPU_EVENT_NONE"
out('TraceEvent %(event)s = {',
- ' .id = %(id)s,',
+ ' .id = 0,',
' .vcpu_id = %(vcpu_id)s,',
' .name = \"%(name)s\",',
' .sstate = %(sstate)s,',
' .dstate = &%(dstate)s ',
'};',
event = e.api(e.QEMU_EVENT),
- id = id,
vcpu_id = vcpu_id,
name = e.name,
sstate = "TRACE_%s_ENABLED" % e.name.upper(),
diff --git a/scripts/tracetool/format/events_h.py
b/scripts/tracetool/format/events_h.py
index ca6d730..1cb332b 100644
--- a/scripts/tracetool/format/events_h.py
+++ b/scripts/tracetool/format/events_h.py
@@ -32,10 +32,6 @@ def generate(events, backend):
for e in events:
out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
- numvcpu = len([e for e in events if "vcpu" in e.properties])
-
- out("#define TRACE_VCPU_EVENT_COUNT %d" % numvcpu)
-
# static state
for e in events:
if 'disable' in e.properties:
diff --git a/trace/control.c b/trace/control.c
index 5f10e2d..1a7bee6 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -35,6 +35,8 @@ typedef struct TraceEventGroup {
static TraceEventGroup *event_groups;
static size_t nevent_groups;
+static uint32_t next_id;
+static uint32_t next_vcpu_id;
QemuOptsList qemu_trace_opts = {
.name = "trace",
@@ -59,6 +61,13 @@ QemuOptsList qemu_trace_opts = {
void trace_event_register_group(TraceEvent **events)
{
+ size_t i;
+ for (i = 0; events[i] != NULL; i++) {
+ events[i]->id = next_id++;
+ if (events[i]->vcpu_id != TRACE_VCPU_EVENT_NONE) {
+ events[i]->vcpu_id = next_vcpu_id++;
+ }
+ }
event_groups = g_renew(TraceEventGroup, event_groups, nevent_groups + 1);
event_groups[nevent_groups].events = events;
nevent_groups++;
@@ -293,5 +302,5 @@ char *trace_opt_parse(const char *optarg)
uint32_t trace_get_vcpu_event_count(void)
{
- return TRACE_VCPU_EVENT_COUNT;
+ return next_vcpu_id;
}
--
2.7.4
- [Qemu-devel] [PULL 04/20] trace: remove some now unused functions, (continued)
- [Qemu-devel] [PULL 04/20] trace: remove some now unused functions, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 05/20] trace: remove global 'uint16 dstate[]' array, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 06/20] trace: remove duplicate control.h includes in generated-tracers.h, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 07/20] trace: break circular dependency in event-internal.h, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 08/20] trace: give each trace event a named TraceEvent struct, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 09/20] trace: remove the TraceEventID and TraceEventVCPUID enums, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 11/20] trace: don't abort qemu if ftrace can't be initialized, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 10/20] trace: emit name <-> ID mapping in simpletrace header, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 12/20] trace: provide mechanism for registering trace events, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 13/20] trace: dynamically allocate trace_dstate in CPUState, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 14/20] trace: dynamically allocate event IDs at runtime,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 16/20] trace: rename _read_events to read_events, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 15/20] trace: get rid of generated-events.h/generated-events.c, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 17/20] trace: push reading of events up a level to tracetool main, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 18/20] trace: pass trace-events to tracetool as a positional param, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 19/20] trace: introduce a formal group name for trace events, Stefan Hajnoczi, 2016/10/07
- [Qemu-devel] [PULL 20/20] trace: Add missing execution mode of guest events, Stefan Hajnoczi, 2016/10/07
- Re: [Qemu-devel] [PULL 00/20] Tracing patches, Peter Maydell, 2016/10/07