From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37156) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXn8s-0006Kj-2c for qemu-devel@nongnu.org; Thu, 11 Aug 2016 06:23:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bXn8n-0007Am-S6 for qemu-devel@nongnu.org; Thu, 11 Aug 2016 06:23:13 -0400 Received: from roura.ac.upc.es ([147.83.33.10]:52615) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXn8n-0007A6-GD for qemu-devel@nongnu.org; Thu, 11 Aug 2016 06:23:09 -0400 From: =?utf-8?b?TGx1w61z?= Vilanova Date: Thu, 11 Aug 2016 12:23:05 +0200 Message-Id: <147091098568.31540.12781119248124146421.stgit@fimbulvetr.bsc.es> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2] trace: Remove 'trace_events_dstate_init' List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , "Daniel P. Berrange" Removes the event state array used for early initialization. Since only events with the "vcpu" property need a late initialization fixup, threats their initialization specially. Assumes that the user won't touch the state of "vcpu" events between early and late initialization (e.g., through QMP). Signed-off-by: Llu=C3=ADs Vilanova --- stubs/trace-control.c | 5 +++++ trace/control-target.c | 9 +++++++++ trace/control.c | 23 ++++++++++------------- trace/control.h | 3 +++ trace/event-internal.h | 1 + 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/stubs/trace-control.c b/stubs/trace-control.c index fe59836..3740c38 100644 --- a/stubs/trace-control.c +++ b/stubs/trace-control.c @@ -11,6 +11,11 @@ #include "trace/control.h" =20 =20 +void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) +{ + trace_event_set_state_dynamic(ev, state); +} + void trace_event_set_state_dynamic(TraceEvent *ev, bool state) { TraceEventID id; diff --git a/trace/control-target.c b/trace/control-target.c index 74c029a..4ee3733 100644 --- a/trace/control-target.c +++ b/trace/control-target.c @@ -13,6 +13,15 @@ #include "translate-all.h" =20 =20 +void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state) +{ + TraceEventID id =3D trace_event_get_id(ev); + assert(trace_event_get_state_static(ev)); + /* Ignore "vcpu" property, since no vCPUs have been created yet */ + trace_events_enabled_count +=3D state - trace_events_dstate[id]; + trace_events_dstate[id] =3D state; +} + void trace_event_set_state_dynamic(TraceEvent *ev, bool state) { CPUState *vcpu; diff --git a/trace/control.c b/trace/control.c index d173c09..f6e06cc 100644 --- a/trace/control.c +++ b/trace/control.c @@ -31,8 +31,6 @@ int trace_events_enabled_count; * - true : Integral counting the number of vCPUs that have this event e= nabled. */ uint16_t trace_events_dstate[TRACE_EVENT_COUNT]; -/* Marks events for late vCPU state init */ -static bool trace_events_dstate_init[TRACE_EVENT_COUNT]; =20 QemuOptsList qemu_trace_opts =3D { .name =3D "trace", @@ -142,10 +140,7 @@ static void do_trace_enable_events(const char *line_= buf) TraceEvent *ev =3D NULL; while ((ev =3D trace_event_pattern(line_ptr, ev)) !=3D NULL) { if (trace_event_get_state_static(ev)) { - /* start tracing */ - trace_event_set_state_dynamic(ev, enable); - /* mark for late vCPU init */ - trace_events_dstate_init[ev->id] =3D true; + trace_event_set_state_dynamic_init(ev, enable); } } } else { @@ -157,10 +152,7 @@ static void do_trace_enable_events(const char *line_= buf) error_report("WARNING: trace event '%s' is not traceable", line_ptr); } else { - /* start tracing */ - trace_event_set_state_dynamic(ev, enable); - /* mark for late vCPU init */ - trace_events_dstate_init[ev->id] =3D true; + trace_event_set_state_dynamic_init(ev, enable); } } } @@ -275,9 +267,14 @@ void trace_init_vcpu_events(void) { TraceEvent *ev =3D NULL; while ((ev =3D trace_event_pattern("*", ev)) !=3D NULL) { - if (trace_event_is_vcpu(ev) && - trace_event_get_state_static(ev) && - trace_events_dstate_init[ev->id]) { + if (trace_event_is_vcpu(ev) && trace_event_get_state_dynamic(ev)= ) { + TraceEventID id =3D trace_event_get_id(ev); + /* check preconditions */ + assert(trace_events_dstate[id] =3D=3D 1); + /* disable early-init state ... */ + trace_events_dstate[id] =3D 0; + trace_events_enabled_count--; + /* ... and properly re-enable */ trace_event_set_state_dynamic(ev, true); } } diff --git a/trace/control.h b/trace/control.h index 0413b28..27a16fc 100644 --- a/trace/control.h +++ b/trace/control.h @@ -274,6 +274,9 @@ char *trace_opt_parse(const char *optarg); * * Re-synchronize initial event state with vCPUs (which can be created a= fter * trace_init_events()). + * + * Precondition: event states won't be changed between trace_enable_even= ts() and + * trace_init_vcpu_events() (e.g., through QMP). */ void trace_init_vcpu_events(void); =20 diff --git a/trace/event-internal.h b/trace/event-internal.h index 5d8fa97..074faf6 100644 --- a/trace/event-internal.h +++ b/trace/event-internal.h @@ -29,5 +29,6 @@ typedef struct TraceEvent { const bool sstate; } TraceEvent; =20 +void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state); =20 #endif /* TRACE__EVENT_INTERNAL_H */