@@ -25,16 +25,6 @@ static inline uint32_t trace_event_get_id(TraceEvent *ev)
return ev->id;
}
-static inline uint32_t trace_event_get_vcpu_id(TraceEvent *ev)
-{
- return 0;
-}
-
-static inline bool trace_event_is_vcpu(TraceEvent *ev)
-{
- return false;
-}
-
static inline const char * trace_event_get_name(TraceEvent *ev)
{
assert(ev != NULL);
@@ -30,13 +30,6 @@
trace_event_get_vcpu_state_dynamic_by_vcpu_id( \
vcpu, _ ## id ## _EVENT.vcpu_id))
-/**
- * trace_event_get_vcpu_state_dynamic:
- *
- * Get the dynamic tracing state of an event for the given vCPU.
- */
-static bool trace_event_get_vcpu_state_dynamic(CPUState *vcpu, TraceEvent *ev);
-
#include "control-internal.h"
static inline bool
@@ -51,13 +44,4 @@ trace_event_get_vcpu_state_dynamic_by_vcpu_id(CPUState *vcpu,
}
}
-static inline bool trace_event_get_vcpu_state_dynamic(CPUState *vcpu,
- TraceEvent *ev)
-{
- uint32_t vcpu_id;
- assert(trace_event_is_vcpu(ev));
- vcpu_id = trace_event_get_vcpu_id(ev);
- return trace_event_get_vcpu_state_dynamic_by_vcpu_id(vcpu, vcpu_id);
-}
-
#endif
@@ -89,23 +89,6 @@ static bool trace_event_is_pattern(const char *str);
*/
static uint32_t trace_event_get_id(TraceEvent *ev);
-/**
- * trace_event_get_vcpu_id:
- *
- * Get the per-vCPU identifier of an event.
- *
- * Special value #TRACE_VCPU_EVENT_NONE means the event is not vCPU-specific
- * (does not have the "vcpu" property).
- */
-static uint32_t trace_event_get_vcpu_id(TraceEvent *ev);
-
-/**
- * trace_event_is_vcpu:
- *
- * Whether this is a per-vCPU event.
- */
-static bool trace_event_is_vcpu(TraceEvent *ev);
-
/**
* trace_event_get_name:
*
@@ -172,21 +155,6 @@ static bool trace_event_get_state_dynamic(TraceEvent *ev);
*/
void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
-/**
- * trace_event_set_vcpu_state_dynamic:
- *
- * Set the dynamic tracing state of an event for the given vCPU.
- *
- * Pre-condition: trace_event_get_vcpu_state_static(ev) == true
- *
- * Note: Changes for execution-time events with the 'tcg' property will not be
- * propagated until the next TB is executed (iff executing in TCG mode).
- */
-void trace_event_set_vcpu_state_dynamic(CPUState *vcpu,
- TraceEvent *ev, bool state);
-
-
-
/**
* trace_init_backends:
*
@@ -205,22 +173,6 @@ bool trace_init_backends(void);
*/
void trace_init_file(void);
-/**
- * trace_init_vcpu:
- * @vcpu: Added vCPU.
- *
- * Set initial dynamic event state for a hot-plugged vCPU.
- */
-void trace_init_vcpu(CPUState *vcpu);
-
-/**
- * trace_fini_vcpu:
- * @vcpu: Removed vCPU.
- *
- * Disable dynamic event state for a hot-unplugged vCPU.
- */
-void trace_fini_vcpu(CPUState *vcpu);
-
/**
* trace_list_events:
* @f: Where to send output.
@@ -211,7 +211,6 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp)
}
/* NOTE: latest generic point where the cpu is fully realized */
- trace_init_vcpu(cpu);
}
static void cpu_common_unrealizefn(DeviceState *dev)
@@ -219,7 +218,6 @@ static void cpu_common_unrealizefn(DeviceState *dev)
CPUState *cpu = CPU(dev);
/* NOTE: latest generic point before the cpu is fully unrealized */
- trace_fini_vcpu(cpu);
cpu_exec_unrealizefn(cpu);
}
@@ -36,16 +36,3 @@ void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
}
}
}
-
-void trace_event_set_vcpu_state_dynamic(CPUState *vcpu,
- TraceEvent *ev, bool state)
-{
- /* should never be called on non-target binaries */
- abort();
-}
-
-void trace_init_vcpu(CPUState *vcpu)
-{
- /* should never be called on non-target binaries */
- abort();
-}
@@ -36,112 +36,22 @@ void trace_event_set_state_dynamic_init(TraceEvent *ev, bool state)
void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
{
- CPUState *vcpu;
assert(trace_event_get_state_static(ev));
- if (trace_event_is_vcpu(ev) && likely(first_cpu != NULL)) {
- CPU_FOREACH(vcpu) {
- trace_event_set_vcpu_state_dynamic(vcpu, ev, state);
- }
- } else {
- /*
- * Without the "vcpu" property, dstate can only be 1 or 0. With it, we
- * haven't instantiated any vCPU yet, so we will set a global state
- * instead, and trace_init_vcpu will reconcile it afterwards.
- */
- bool state_pre = *ev->dstate;
- if (state_pre != state) {
- if (state) {
- trace_events_enabled_count++;
- *ev->dstate = 1;
- } else {
- trace_events_enabled_count--;
- *ev->dstate = 0;
- }
- }
- }
-}
-static void trace_event_synchronize_vcpu_state_dynamic(
- CPUState *vcpu, run_on_cpu_data ignored)
-{
- bitmap_copy(vcpu->trace_dstate, vcpu->trace_dstate_delayed,
- CPU_TRACE_DSTATE_MAX_EVENTS);
- tcg_flush_jmp_cache(vcpu);
-}
-
-void trace_event_set_vcpu_state_dynamic(CPUState *vcpu,
- TraceEvent *ev, bool state)
-{
- uint32_t vcpu_id;
- bool state_pre;
- assert(trace_event_get_state_static(ev));
- assert(trace_event_is_vcpu(ev));
- vcpu_id = trace_event_get_vcpu_id(ev);
- state_pre = test_bit(vcpu_id, vcpu->trace_dstate);
+ /*
+ * There is no longer a "vcpu" property, dstate can only be 1 or
+ * 0. With it, we haven't instantiated any vCPU yet, so we will
+ * set a global state instead, and trace_init_vcpu will reconcile
+ * it afterwards.
+ */
+ bool state_pre = *ev->dstate;
if (state_pre != state) {
if (state) {
trace_events_enabled_count++;
- set_bit(vcpu_id, vcpu->trace_dstate_delayed);
- (*ev->dstate)++;
+ *ev->dstate = 1;
} else {
trace_events_enabled_count--;
- clear_bit(vcpu_id, vcpu->trace_dstate_delayed);
- (*ev->dstate)--;
- }
- if (vcpu->created) {
- /*
- * Delay changes until next TB; we want all TBs to be built from a
- * single set of dstate values to ensure consistency of generated
- * tracing code.
- */
- async_run_on_cpu(vcpu, trace_event_synchronize_vcpu_state_dynamic,
- RUN_ON_CPU_NULL);
- } else {
- trace_event_synchronize_vcpu_state_dynamic(vcpu, RUN_ON_CPU_NULL);
- }
- }
-}
-
-static bool adding_first_cpu1(void)
-{
- CPUState *cpu;
- size_t count = 0;
- CPU_FOREACH(cpu) {
- count++;
- if (count > 1) {
- return false;
- }
- }
- return true;
-}
-
-static bool adding_first_cpu(void)
-{
- QEMU_LOCK_GUARD(&qemu_cpu_list_lock);
-
- return adding_first_cpu1();
-}
-
-void trace_init_vcpu(CPUState *vcpu)
-{
- TraceEventIter iter;
- TraceEvent *ev;
- trace_event_iter_init_all(&iter);
- while ((ev = trace_event_iter_next(&iter)) != NULL) {
- if (trace_event_is_vcpu(ev) &&
- trace_event_get_state_static(ev) &&
- trace_event_get_state_dynamic(ev)) {
- if (adding_first_cpu()) {
- /* check preconditions */
- assert(*ev->dstate == 1);
- /* disable early-init state ... */
- *ev->dstate = 0;
- trace_events_enabled_count--;
- /* ... and properly re-enable */
- trace_event_set_vcpu_state_dynamic(vcpu, ev, true);
- } else {
- trace_event_set_vcpu_state_dynamic(vcpu, ev, true);
- }
+ *ev->dstate = 0;
}
}
}
@@ -262,22 +262,6 @@ void trace_init_file(void)
#endif
}
-void trace_fini_vcpu(CPUState *vcpu)
-{
- TraceEventIter iter;
- TraceEvent *ev;
-
- trace_event_iter_init_all(&iter);
- while ((ev = trace_event_iter_next(&iter)) != NULL) {
- if (trace_event_is_vcpu(ev) &&
- trace_event_get_state_static(ev) &&
- trace_event_get_vcpu_state_dynamic(vcpu, ev)) {
- /* must disable to affect the global counter */
- trace_event_set_vcpu_state_dynamic(vcpu, ev, false);
- }
- }
-}
-
bool trace_init_backends(void)
{
#ifdef CONFIG_TRACE_SIMPLE
@@ -13,20 +13,7 @@
#include "control-vcpu.h"
-static CPUState *get_cpu(bool has_vcpu, int vcpu, Error **errp)
-{
- if (has_vcpu) {
- CPUState *cpu = qemu_get_cpu(vcpu);
- if (cpu == NULL) {
- error_setg(errp, "invalid vCPU index %u", vcpu);
- }
- return cpu;
- } else {
- return NULL;
- }
-}
-
-static bool check_events(bool has_vcpu, bool ignore_unavailable, bool is_pattern,
+static bool check_events(bool ignore_unavailable, bool is_pattern,
const char *name, Error **errp)
{
if (!is_pattern) {
@@ -38,12 +25,6 @@ static bool check_events(bool has_vcpu, bool ignore_unavailable, bool is_pattern
return false;
}
- /* error for non-vcpu event */
- if (has_vcpu && !trace_event_is_vcpu(ev)) {
- error_setg(errp, "event \"%s\" is not vCPU-specific", name);
- return false;
- }
-
/* error for unavailable event */
if (!ignore_unavailable && !trace_event_get_state_static(ev)) {
error_setg(errp, "event \"%s\" is disabled", name);
@@ -70,22 +51,13 @@ TraceEventInfoList *qmp_trace_event_get_state(const char *name,
bool has_vcpu, int64_t vcpu,
Error **errp)
{
- Error *err = NULL;
TraceEventInfoList *events = NULL;
TraceEventIter iter;
TraceEvent *ev;
bool is_pattern = trace_event_is_pattern(name);
- CPUState *cpu;
-
- /* Check provided vcpu */
- cpu = get_cpu(has_vcpu, vcpu, &err);
- if (err) {
- error_propagate(errp, err);
- return NULL;
- }
/* Check events */
- if (!check_events(has_vcpu, true, is_pattern, name, errp)) {
+ if (!check_events(true, is_pattern, name, errp)) {
return NULL;
}
@@ -93,33 +65,17 @@ TraceEventInfoList *qmp_trace_event_get_state(const char *name,
trace_event_iter_init_pattern(&iter, name);
while ((ev = trace_event_iter_next(&iter)) != NULL) {
TraceEventInfo *value;
- bool is_vcpu = trace_event_is_vcpu(ev);
- if (has_vcpu && !is_vcpu) {
- continue;
- }
value = g_new(TraceEventInfo, 1);
- value->vcpu = is_vcpu;
value->name = g_strdup(trace_event_get_name(ev));
if (!trace_event_get_state_static(ev)) {
value->state = TRACE_EVENT_STATE_UNAVAILABLE;
} else {
- if (has_vcpu) {
- if (is_vcpu) {
- if (trace_event_get_vcpu_state_dynamic(cpu, ev)) {
- value->state = TRACE_EVENT_STATE_ENABLED;
- } else {
- value->state = TRACE_EVENT_STATE_DISABLED;
- }
- }
- /* else: already skipped above */
+ if (trace_event_get_state_dynamic(ev)) {
+ value->state = TRACE_EVENT_STATE_ENABLED;
} else {
- if (trace_event_get_state_dynamic(ev)) {
- value->state = TRACE_EVENT_STATE_ENABLED;
- } else {
- value->state = TRACE_EVENT_STATE_DISABLED;
- }
+ value->state = TRACE_EVENT_STATE_DISABLED;
}
}
QAPI_LIST_PREPEND(events, value);
@@ -133,21 +89,12 @@ void qmp_trace_event_set_state(const char *name, bool enable,
bool has_vcpu, int64_t vcpu,
Error **errp)
{
- Error *err = NULL;
TraceEventIter iter;
TraceEvent *ev;
bool is_pattern = trace_event_is_pattern(name);
- CPUState *cpu;
-
- /* Check provided vcpu */
- cpu = get_cpu(has_vcpu, vcpu, &err);
- if (err) {
- error_propagate(errp, err);
- return;
- }
/* Check events */
- if (!check_events(has_vcpu, has_ignore_unavailable && ignore_unavailable,
+ if (!check_events(has_ignore_unavailable && ignore_unavailable,
is_pattern, name, errp)) {
return;
}
@@ -155,14 +102,9 @@ void qmp_trace_event_set_state(const char *name, bool enable,
/* Apply changes (all errors checked above) */
trace_event_iter_init_pattern(&iter, name);
while ((ev = trace_event_iter_next(&iter)) != NULL) {
- if (!trace_event_get_state_static(ev) ||
- (has_vcpu && !trace_event_is_vcpu(ev))) {
+ if (!trace_event_get_state_static(ev)) {
continue;
}
- if (has_vcpu) {
- trace_event_set_vcpu_state_dynamic(cpu, ev, enable);
- } else {
- trace_event_set_state_dynamic(ev, enable);
- }
+ trace_event_set_state_dynamic(ev, enable);
}
}
@@ -37,16 +37,10 @@ void hmp_trace_event(Monitor *mon, const QDict *qdict)
{
const char *tp_name = qdict_get_str(qdict, "name");
bool new_state = qdict_get_bool(qdict, "option");
- bool has_vcpu = qdict_haskey(qdict, "vcpu");
- int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
Error *local_err = NULL;
- if (vcpu < 0) {
- monitor_printf(mon, "argument vcpu must be positive");
- return;
- }
-
- qmp_trace_event_set_state(tp_name, new_state, true, true, has_vcpu, vcpu, &local_err);
+ qmp_trace_event_set_state(tp_name, new_state,
+ true, true, false, 0, &local_err);
if (local_err) {
error_report_err(local_err);
}
@@ -80,8 +74,6 @@ void hmp_trace_file(Monitor *mon, const QDict *qdict)
void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
{
const char *name = qdict_get_try_str(qdict, "name");
- bool has_vcpu = qdict_haskey(qdict, "vcpu");
- int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
TraceEventInfoList *events;
TraceEventInfoList *elem;
Error *local_err = NULL;
@@ -89,12 +81,8 @@ void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
if (name == NULL) {
name = "*";
}
- if (vcpu < 0) {
- monitor_printf(mon, "argument vcpu must be positive");
- return;
- }
- events = qmp_trace_event_get_state(name, has_vcpu, vcpu, &local_err);
+ events = qmp_trace_event_get_state(name, false, 0, &local_err);
if (local_err) {
error_report_err(local_err);
return;