mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-30 05:43:53 -06:00
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>
This commit is contained in:
parent
b7d48952c3
commit
ca3fa0e88f
3 changed files with 12 additions and 13 deletions
|
@ -28,25 +28,19 @@ def generate(events, backend):
|
||||||
for e in events:
|
for e in events:
|
||||||
out('uint16_t %s;' % e.api(e.QEMU_DSTATE))
|
out('uint16_t %s;' % e.api(e.QEMU_DSTATE))
|
||||||
|
|
||||||
next_id = 0
|
|
||||||
next_vcpu_id = 0
|
|
||||||
for e in events:
|
for e in events:
|
||||||
id = next_id
|
|
||||||
next_id += 1
|
|
||||||
if "vcpu" in e.properties:
|
if "vcpu" in e.properties:
|
||||||
vcpu_id = next_vcpu_id
|
vcpu_id = 0
|
||||||
next_vcpu_id += 1
|
|
||||||
else:
|
else:
|
||||||
vcpu_id = "TRACE_VCPU_EVENT_NONE"
|
vcpu_id = "TRACE_VCPU_EVENT_NONE"
|
||||||
out('TraceEvent %(event)s = {',
|
out('TraceEvent %(event)s = {',
|
||||||
' .id = %(id)s,',
|
' .id = 0,',
|
||||||
' .vcpu_id = %(vcpu_id)s,',
|
' .vcpu_id = %(vcpu_id)s,',
|
||||||
' .name = \"%(name)s\",',
|
' .name = \"%(name)s\",',
|
||||||
' .sstate = %(sstate)s,',
|
' .sstate = %(sstate)s,',
|
||||||
' .dstate = &%(dstate)s ',
|
' .dstate = &%(dstate)s ',
|
||||||
'};',
|
'};',
|
||||||
event = e.api(e.QEMU_EVENT),
|
event = e.api(e.QEMU_EVENT),
|
||||||
id = id,
|
|
||||||
vcpu_id = vcpu_id,
|
vcpu_id = vcpu_id,
|
||||||
name = e.name,
|
name = e.name,
|
||||||
sstate = "TRACE_%s_ENABLED" % e.name.upper(),
|
sstate = "TRACE_%s_ENABLED" % e.name.upper(),
|
||||||
|
|
|
@ -32,10 +32,6 @@ def generate(events, backend):
|
||||||
for e in events:
|
for e in events:
|
||||||
out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
|
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
|
# static state
|
||||||
for e in events:
|
for e in events:
|
||||||
if 'disable' in e.properties:
|
if 'disable' in e.properties:
|
||||||
|
|
|
@ -35,6 +35,8 @@ typedef struct TraceEventGroup {
|
||||||
|
|
||||||
static TraceEventGroup *event_groups;
|
static TraceEventGroup *event_groups;
|
||||||
static size_t nevent_groups;
|
static size_t nevent_groups;
|
||||||
|
static uint32_t next_id;
|
||||||
|
static uint32_t next_vcpu_id;
|
||||||
|
|
||||||
QemuOptsList qemu_trace_opts = {
|
QemuOptsList qemu_trace_opts = {
|
||||||
.name = "trace",
|
.name = "trace",
|
||||||
|
@ -59,6 +61,13 @@ QemuOptsList qemu_trace_opts = {
|
||||||
|
|
||||||
void trace_event_register_group(TraceEvent **events)
|
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 = g_renew(TraceEventGroup, event_groups, nevent_groups + 1);
|
||||||
event_groups[nevent_groups].events = events;
|
event_groups[nevent_groups].events = events;
|
||||||
nevent_groups++;
|
nevent_groups++;
|
||||||
|
@ -293,5 +302,5 @@ char *trace_opt_parse(const char *optarg)
|
||||||
|
|
||||||
uint32_t trace_get_vcpu_event_count(void)
|
uint32_t trace_get_vcpu_event_count(void)
|
||||||
{
|
{
|
||||||
return TRACE_VCPU_EVENT_COUNT;
|
return next_vcpu_id;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue