Daniel P Berrange writes: > 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 us allow code to be generated
allow us allow -> allow > from individual trace-events without having to figure out > globally unique numbering at build time. > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> Reviewed-by: Lluís Vilanova <vilan...@ac.upc.edu> > --- > scripts/tracetool/format/events_c.py | 10 ++-------- > scripts/tracetool/format/events_h.py | 7 ------- > trace/control.c | 11 ++++++++++- > 3 files changed, 12 insertions(+), 16 deletions(-) > diff --git a/scripts/tracetool/format/events_c.py > b/scripts/tracetool/format/events_c.py > index 766bc09..cdfcfbc 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 5da1d4c..1cb332b 100644 > --- a/scripts/tracetool/format/events_h.py > +++ b/scripts/tracetool/format/events_h.py > @@ -32,13 +32,6 @@ def generate(events, backend): > for e in events: > out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE)) > - numvcpu = 0 > - for e in events: > - if "vcpu" in e.properties: > - numvcpu += 1 > - > - 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 9704f4d..2b99685 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++; > @@ -313,5 +322,5 @@ void trace_init_vcpu_events(void) > uint32_t trace_get_vcpu_event_count(void) > { > - return TRACE_VCPU_EVENT_COUNT; > + return next_vcpu_id; > } > -- > 2.7.4