trace: remove global 'uint16 dstate[]' array

Instead of having a global dstate array, declare a single
'uint16 TRACE_${EVENT_NAME}_DSTATE' variable for each
trace event. Record a pointer to this variable in the
TraceEvent struct too.

By turning trace_event_get_state_dynamic_by_id into a
macro, this still hits the fast path, and cache affinity
is ensured by declaring all the uint16 vars adjacent to
each other.

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-7-git-send-email-berrange@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Daniel P. Berrange 2016-10-04 14:35:45 +01:00 committed by Stefan Hajnoczi
parent 599ab2f241
commit 9397740244
8 changed files with 37 additions and 39 deletions

View file

@ -18,22 +18,21 @@ void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state)
void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
{
TraceEventID id;
bool state_pre;
assert(trace_event_get_state_static(ev));
id = trace_event_get_id(ev);
/*
* We ignore the "vcpu" property here, since there's no target code. Then
* dstate can only be 1 or 0.
*/
state_pre = trace_events_dstate[id];
state_pre = *(ev->dstate);
if (state_pre != state) {
if (state) {
trace_events_enabled_count++;
trace_events_dstate[id] = 1;
*(ev->dstate) = 1;
} else {
trace_events_enabled_count--;
trace_events_dstate[id] = 0;
*(ev->dstate) = 0;
}
}
}