TraceEventInfoList *qmp_trace_event_get_state(const char *name, Error **errp) { TraceEventInfoList *events = NULL; bool found = false; TraceEvent *ev; ev = NULL; while ((ev = trace_event_pattern(name, ev)) != NULL) { TraceEventInfoList *elem = g_new(TraceEventInfoList, 1); elem->value = g_new(TraceEventInfo, 1); elem->value->name = g_strdup(trace_event_get_name(ev)); if (!trace_event_get_state_static(ev)) { elem->value->state = TRACE_EVENT_STATE_UNAVAILABLE; } else if (!trace_event_get_state_dynamic(ev)) { elem->value->state = TRACE_EVENT_STATE_DISABLED; } else { elem->value->state = TRACE_EVENT_STATE_ENABLED; } elem->next = events; events = elem; found = true; } if (!found && !trace_event_is_pattern(name)) { error_setg(errp, "unknown event \"%s\"", name); } return events; }
void trace_print_events(FILE *stream, fprintf_function stream_printf) { TraceEventID i; for (i = 0; i < trace_event_count(); i++) { TraceEvent *ev = trace_event_id(i); stream_printf(stream, "%s [Event ID %u] : state %u\n", trace_event_get_name(ev), i, trace_event_get_state_static(ev) && trace_event_get_state_dynamic(ev)); } }
TraceEventInfoList *qmp_trace_event_get_state(const char *name, bool has_vcpu, int64_t vcpu, Error **errp) { Error *err = NULL; TraceEventInfoList *events = NULL; 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)) { return NULL; } /* Get states (all errors checked above) */ ev = NULL; while ((ev = trace_event_pattern(name, ev)) != NULL) { TraceEventInfoList *elem; bool is_vcpu = trace_event_is_vcpu(ev); if (has_vcpu && !is_vcpu) { continue; } elem = g_new(TraceEventInfoList, 1); elem->value = g_new(TraceEventInfo, 1); elem->value->vcpu = is_vcpu; elem->value->name = g_strdup(trace_event_get_name(ev)); if (!trace_event_get_state_static(ev)) { elem->value->state = TRACE_EVENT_STATE_UNAVAILABLE; } else { if (has_vcpu) { if (is_vcpu) { if (trace_event_get_vcpu_state_dynamic(cpu, ev)) { elem->value->state = TRACE_EVENT_STATE_ENABLED; } else { elem->value->state = TRACE_EVENT_STATE_DISABLED; } } /* else: already skipped above */ } else { if (trace_event_get_state_dynamic(ev)) { elem->value->state = TRACE_EVENT_STATE_ENABLED; } else { elem->value->state = TRACE_EVENT_STATE_DISABLED; } } } elem->next = events; events = elem; } return events; }