aboutsummaryrefslogtreecommitdiff
path: root/trace/control-target.c
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2016-10-04 14:35:45 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2016-10-12 09:35:54 +0200
commit93977402441405055500ff0389b49f6bbac9d50b (patch)
tree3a1e1ded1e54db71d2576460552faae5d0f32136 /trace/control-target.c
parent599ab2f241ee6693ea0a2700210718327b346f7f (diff)
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>
Diffstat (limited to 'trace/control-target.c')
-rw-r--r--trace/control-target.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/trace/control-target.c b/trace/control-target.c
index 50bac4fb7d..3b55941414 100644
--- a/trace/control-target.c
+++ b/trace/control-target.c
@@ -16,21 +16,20 @@
void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state)
{
- TraceEventID id = trace_event_get_id(ev);
bool state_pre;
assert(trace_event_get_state_static(ev));
/*
* We ignore the "vcpu" property here, since no vCPUs have been created
* yet. 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;
}
}
}
@@ -45,15 +44,14 @@ void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
}
} else {
/* Without the "vcpu" property, dstate can only be 1 or 0 */
- TraceEventID id = trace_event_get_id(ev);
- bool state_pre = trace_events_dstate[id];
+ bool 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;
}
}
}
@@ -62,23 +60,21 @@ void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
void trace_event_set_vcpu_state_dynamic(CPUState *vcpu,
TraceEvent *ev, bool state)
{
- TraceEventID id;
TraceEventVCPUID vcpu_id;
bool state_pre;
assert(trace_event_get_state_static(ev));
assert(trace_event_is_vcpu(ev));
- id = trace_event_get_id(ev);
vcpu_id = trace_event_get_vcpu_id(ev);
state_pre = test_bit(vcpu_id, vcpu->trace_dstate);
if (state_pre != state) {
if (state) {
trace_events_enabled_count++;
set_bit(vcpu_id, vcpu->trace_dstate);
- trace_events_dstate[id]++;
+ (*ev->dstate)++;
} else {
trace_events_enabled_count--;
clear_bit(vcpu_id, vcpu->trace_dstate);
- trace_events_dstate[id]--;
+ (*ev->dstate)--;
}
}
}
@@ -105,12 +101,11 @@ void trace_init_vcpu(CPUState *vcpu)
if (trace_event_is_vcpu(ev) &&
trace_event_get_state_static(ev) &&
trace_event_get_state_dynamic(ev)) {
- TraceEventID id = trace_event_get_id(ev);
if (adding_first_cpu()) {
/* check preconditions */
- assert(trace_events_dstate[id] == 1);
+ assert(*ev->dstate == 1);
/* disable early-init state ... */
- trace_events_dstate[id] = 0;
+ *ev->dstate = 0;
trace_events_enabled_count--;
/* ... and properly re-enable */
trace_event_set_vcpu_state_dynamic(vcpu, ev, true);