/* SPDX-License-Identifier: GPL-2.0 */ #undef TRACE_SYSTEM #define TRACE_SYSTEM rv #if !defined(_TRACE_RV_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_RV_H #include #include #ifdef CONFIG_DA_MON_EVENTS_IMPLICIT DECLARE_EVENT_CLASS(event_da_monitor, TP_PROTO(char *state, char *event, char *next_state, bool final_state), TP_ARGS(state, event, next_state, final_state), TP_STRUCT__entry( __string( state, state ) __string( event, event ) __string( next_state, next_state ) __field( bool, final_state ) ), TP_fast_assign( __assign_str(state); __assign_str(event); __assign_str(next_state); __entry->final_state = final_state; ), TP_printk("%s x %s -> %s%s", __get_str(state), __get_str(event), __get_str(next_state), __entry->final_state ? " (final)" : "") ); DECLARE_EVENT_CLASS(error_da_monitor, TP_PROTO(char *state, char *event), TP_ARGS(state, event), TP_STRUCT__entry( __string( state, state ) __string( event, event ) ), TP_fast_assign( __assign_str(state); __assign_str(event); ), TP_printk("event %s not expected in the state %s", __get_str(event), __get_str(state)) ); #include #include #include #include #include #include // Add new monitors based on CONFIG_DA_MON_EVENTS_IMPLICIT here #endif /* CONFIG_DA_MON_EVENTS_IMPLICIT */ #ifdef CONFIG_DA_MON_EVENTS_ID DECLARE_EVENT_CLASS(event_da_monitor_id, TP_PROTO(int id, char *state, char *event, char *next_state, bool final_state), TP_ARGS(id, state, event, next_state, final_state), TP_STRUCT__entry( __field( int, id ) __string( state, state ) __string( event, event ) __string( next_state, next_state ) __field( bool, final_state ) ), TP_fast_assign( __assign_str(state); __assign_str(event); __assign_str(next_state); __entry->id = id; __entry->final_state = final_state; ), TP_printk("%d: %s x %s -> %s%s", __entry->id, __get_str(state), __get_str(event), __get_str(next_state), __entry->final_state ? " (final)" : "") ); DECLARE_EVENT_CLASS(error_da_monitor_id, TP_PROTO(int id, char *state, char *event), TP_ARGS(id, state, event), TP_STRUCT__entry( __field( int, id ) __string( state, state ) __string( event, event ) ), TP_fast_assign( __assign_str(state); __assign_str(event); __entry->id = id; ), TP_printk("%d: event %s not expected in the state %s", __entry->id, __get_str(event), __get_str(state)) ); #include #include #include #include // Add new monitors based on CONFIG_DA_MON_EVENTS_ID here #endif /* CONFIG_DA_MON_EVENTS_ID */ #ifdef CONFIG_LTL_MON_EVENTS_ID DECLARE_EVENT_CLASS(event_ltl_monitor_id, TP_PROTO(struct task_struct *task, char *states, char *atoms, char *next), TP_ARGS(task, states, atoms, next), TP_STRUCT__entry( __string(comm, task->comm) __field(pid_t, pid) __string(states, states) __string(atoms, atoms) __string(next, next) ), TP_fast_assign( __assign_str(comm); __entry->pid = task->pid; __assign_str(states); __assign_str(atoms); __assign_str(next); ), TP_printk("%s[%d]: (%s) x (%s) -> (%s)", __get_str(comm), __entry->pid, __get_str(states), __get_str(atoms), __get_str(next)) ); DECLARE_EVENT_CLASS(error_ltl_monitor_id, TP_PROTO(struct task_struct *task), TP_ARGS(task), TP_STRUCT__entry( __string(comm, task->comm) __field(pid_t, pid) ), TP_fast_assign( __assign_str(comm); __entry->pid = task->pid; ), TP_printk("%s[%d]: violation detected", __get_str(comm), __entry->pid) ); #include #include // Add new monitors based on CONFIG_LTL_MON_EVENTS_ID here #endif /* CONFIG_LTL_MON_EVENTS_ID */ #ifdef CONFIG_RV_MON_MAINTENANCE_EVENTS /* Tracepoint useful for monitors development, currenly only used in DA */ TRACE_EVENT(rv_retries_error, TP_PROTO(char *name, char *event), TP_ARGS(name, event), TP_STRUCT__entry( __string( name, name ) __string( event, event ) ), TP_fast_assign( __assign_str(name); __assign_str(event); ), TP_printk(__stringify(MAX_DA_RETRY_RACING_EVENTS) " retries reached for event %s, resetting monitor %s", __get_str(event), __get_str(name)) ); #endif /* CONFIG_RV_MON_MAINTENANCE_EVENTS */ #endif /* _TRACE_RV_H */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH #define TRACE_INCLUDE_PATH . #undef TRACE_INCLUDE_FILE #define TRACE_INCLUDE_FILE rv_trace #include