提交 ca3fa0e8 编写于 作者: D Daniel P. Berrange 提交者: Stefan Hajnoczi

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: NStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: NLluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
Message-id: 1475588159-30598-16-git-send-email-berrange@redhat.com
Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
上级 b7d48952
......@@ -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(),
......
......@@ -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:
......
......@@ -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;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册