aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2016-10-04 14:35:54 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2016-10-12 09:54:52 +0200
commitca3fa0e88f3a8e22f774751bcb10cc205772c2fc (patch)
tree91502ce0e6592ba52fe07fa9ec78fb79a7b613b1
parentb7d48952c375842bd669460fd8384d90cc12286c (diff)
trace: dynamically allocate event IDs at runtime
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 <stefanha@redhat.com> Reviewed-by: LluĂ­s Vilanova <vilanova@ac.upc.edu> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 1475588159-30598-16-git-send-email-berrange@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--scripts/tracetool/format/events_c.py10
-rw-r--r--scripts/tracetool/format/events_h.py4
-rw-r--r--trace/control.c11
3 files changed, 12 insertions, 13 deletions
diff --git a/scripts/tracetool/format/events_c.py b/scripts/tracetool/format/events_c.py
index 88175559de..a976c22c8b 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 ca6d730519..1cb332befc 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 5f10e2d96e..1a7bee6ddc 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;
}