Commit ef4c9fc8 authored by Daniel P. Berrangé's avatar Daniel P. Berrangé Committed by Stefan Hajnoczi
Browse files

trace: remove the TraceEventID and TraceEventVCPUID enums



The TraceEventID and TraceEventVCPUID enums constants are
no longer actually used for anything critical.

The TRACE_EVENT_COUNT limit is used to determine the size
of the TraceEvents array, and can be removed if we just
NULL terminate the array instead.

The TRACE_VCPU_EVENT_COUNT limit is used as a magic value
for marking non-vCPU events, and also for declaring the
size of the trace dstate mask in the CPUState struct.
The former usage can be replaced by a dedicated constant
TRACE_EVENT_VCPU_NONE, defined as (uint32_t)-1. For the
latter usage, we can simply define a constant for the
number of VCPUs, avoiding the need for the full enum.

The only other usages of the enum values can be replaced
by accesing the id/vcpu_id fields via the named TraceEvent
structs.

Reviewed-by: default avatarLluís Vilanova <vilanova@ac.upc.edu>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
Message-id: 1475588159-30598-11-git-send-email-berrange@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 79218be4
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -80,11 +80,11 @@ def generate_c(event):
        '        return;',
        '    }',
        '',
        '    if (trace_record_start(&rec, %(event_id)s, %(size_str)s)) {',
        '    if (trace_record_start(&rec, %(event_obj)s.id, %(size_str)s)) {',
        '        return; /* Trace Buffer Full, Event Dropped ! */',
        '    }',
        cond=cond,
        event_id=event_id,
        event_obj=event.api(event.QEMU_EVENT),
        size_str=sizestr)

    if len(event.args) > 0:
+11 −5
Original line number Diff line number Diff line
@@ -28,11 +28,16 @@ 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 = "TRACE_VCPU_" + e.name.upper()
            vcpu_id = next_vcpu_id
            next_vcpu_id += 1
        else:
            vcpu_id = "TRACE_VCPU_EVENT_COUNT"
            vcpu_id = "TRACE_VCPU_EVENT_NONE"
        out('TraceEvent %(event)s = {',
            '    .id = %(id)s,',
            '    .vcpu_id = %(vcpu_id)s,',
@@ -41,16 +46,17 @@ def generate(events, backend):
            '    .dstate = &%(dstate)s ',
            '};',
            event = e.api(e.QEMU_EVENT),
            id = "TRACE_" + e.name.upper(),
            id = id,
            vcpu_id = vcpu_id,
            name = e.name,
            sstate = "TRACE_%s_ENABLED" % e.name.upper(),
            dstate = e.api(e.QEMU_DSTATE))

    out('TraceEvent *trace_events[TRACE_EVENT_COUNT] = {')
    out('TraceEvent *trace_events[] = {')

    for e in events:
        out('    &%(event)s,', event = e.api(e.QEMU_EVENT))

    out('};',
    out('  NULL,',
        '};',
        '')
+2 −17
Original line number Diff line number Diff line
@@ -29,27 +29,12 @@ def generate(events, backend):
        out('extern TraceEvent %(event)s;',
            event = e.api(e.QEMU_EVENT))

    # event identifiers
    out('typedef enum {')

    for e in events:
        out('    TRACE_%s,' % e.name.upper())

    out('    TRACE_EVENT_COUNT',
        '} TraceEventID;')

    for e in events:
        out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))

    # per-vCPU event identifiers
    out('typedef enum {')

    for e in events:
        if "vcpu" in e.properties:
            out('    TRACE_VCPU_%s,' % e.name.upper())
    numvcpu = len([e for e in events if "vcpu" in e.properties])

    out('    TRACE_VCPU_EVENT_COUNT',
        '} TraceEventVCPUID;')
    out("#define TRACE_VCPU_EVENT_COUNT %d" % numvcpu)

    # static state
    for e in events:
+1 −2
Original line number Diff line number Diff line
@@ -32,8 +32,7 @@ def generate(events, backend):
        if "vcpu" in e.properties:
            trace_cpu = next(iter(e.args))[1]
            cond = "trace_event_get_vcpu_state(%(cpu)s,"\
                   " TRACE_%(id)s,"\
                   " TRACE_VCPU_%(id)s)"\
                   " TRACE_%(id)s)"\
                   % dict(
                       cpu=trace_cpu,
                       id=e.name.upper())
+10 −9
Original line number Diff line number Diff line
@@ -25,20 +25,20 @@ static inline bool trace_event_is_pattern(const char *str)
    return strchr(str, '*') != NULL;
}

static inline TraceEventID trace_event_get_id(TraceEvent *ev)
static inline uint32_t trace_event_get_id(TraceEvent *ev)
{
    assert(ev != NULL);
    return ev->id;
}

static inline TraceEventVCPUID trace_event_get_vcpu_id(TraceEvent *ev)
static inline uint32_t trace_event_get_vcpu_id(TraceEvent *ev)
{
    return ev->vcpu_id;
}

static inline bool trace_event_is_vcpu(TraceEvent *ev)
{
    return ev->vcpu_id != TRACE_VCPU_EVENT_COUNT;
    return ev->vcpu_id != TRACE_VCPU_EVENT_NONE;
}

static inline const char * trace_event_get_name(TraceEvent *ev)
@@ -62,12 +62,13 @@ static inline bool trace_event_get_state_dynamic(TraceEvent *ev)
    return unlikely(trace_events_enabled_count) && *ev->dstate;
}

static inline bool trace_event_get_vcpu_state_dynamic_by_vcpu_id(CPUState *vcpu,
                                                                 TraceEventVCPUID id)
static inline bool
trace_event_get_vcpu_state_dynamic_by_vcpu_id(CPUState *vcpu,
                                              uint32_t vcpu_id)
{
    /* it's on fast path, avoid consistency checks (asserts) */
    if (unlikely(trace_events_enabled_count)) {
        return test_bit(id, vcpu->trace_dstate);
        return test_bit(vcpu_id, vcpu->trace_dstate);
    } else {
        return false;
    }
@@ -76,10 +77,10 @@ static inline bool trace_event_get_vcpu_state_dynamic_by_vcpu_id(CPUState *vcpu,
static inline bool trace_event_get_vcpu_state_dynamic(CPUState *vcpu,
                                                      TraceEvent *ev)
{
    TraceEventVCPUID id;
    uint32_t vcpu_id;
    assert(trace_event_is_vcpu(ev));
    id = trace_event_get_vcpu_id(ev);
    return trace_event_get_vcpu_state_dynamic_by_vcpu_id(vcpu, id);
    vcpu_id = trace_event_get_vcpu_id(ev);
    return trace_event_get_vcpu_state_dynamic_by_vcpu_id(vcpu, vcpu_id);
}

#endif /* TRACE__CONTROL_INTERNAL_H */
Loading