@ -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 ) ;
}
}