| /* 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 <linux/rv.h> | |
| #include <linux/tracepoint.h> | |
| #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 <monitors/wip/wip_trace.h> | |
| #include <monitors/sco/sco_trace.h> | |
| #include <monitors/scpd/scpd_trace.h> | |
| #include <monitors/snep/snep_trace.h> | |
| #include <monitors/sts/sts_trace.h> | |
| // Add new monitors based on CONFIG_DA_MON_EVENTS_IMPLICIT here | |
| #ifdef CONFIG_HA_MON_EVENTS_IMPLICIT | |
| /* For simplicity this class is marked as DA although relevant only for HA */ | |
| DECLARE_EVENT_CLASS(error_env_da_monitor, | |
| TP_PROTO(char *state, char *event, char *env), | |
| TP_ARGS(state, event, env), | |
| TP_STRUCT__entry( | |
| __string( state, state ) | |
| __string( event, event ) | |
| __string( env, env ) | |
| ), | |
| TP_fast_assign( | |
| __assign_str(state); | |
| __assign_str(event); | |
| __assign_str(env); | |
| ), | |
| TP_printk("event %s not expected in the state %s with env %s", | |
| __get_str(event), | |
| __get_str(state), | |
| __get_str(env)) | |
| ); | |
| #include <monitors/opid/opid_trace.h> | |
| // Add new monitors based on CONFIG_HA_MON_EVENTS_IMPLICIT here | |
| #endif | |
| #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 <monitors/wwnr/wwnr_trace.h> | |
| #include <monitors/snroc/snroc_trace.h> | |
| #include <monitors/nrp/nrp_trace.h> | |
| #include <monitors/sssw/sssw_trace.h> | |
| // Add new monitors based on CONFIG_DA_MON_EVENTS_ID here | |
| #ifdef CONFIG_HA_MON_EVENTS_ID | |
| /* For simplicity this class is marked as DA although relevant only for HA */ | |
| DECLARE_EVENT_CLASS(error_env_da_monitor_id, | |
| TP_PROTO(int id, char *state, char *event, char *env), | |
| TP_ARGS(id, state, event, env), | |
| TP_STRUCT__entry( | |
| __field( int, id ) | |
| __string( state, state ) | |
| __string( event, event ) | |
| __string( env, env ) | |
| ), | |
| TP_fast_assign( | |
| __assign_str(state); | |
| __assign_str(event); | |
| __assign_str(env); | |
| __entry->id = id; | |
| ), | |
| TP_printk("%d: event %s not expected in the state %s with env %s", | |
| __entry->id, | |
| __get_str(event), | |
| __get_str(state), | |
| __get_str(env)) | |
| ); | |
| #include <monitors/stall/stall_trace.h> | |
| #include <monitors/nomiss/nomiss_trace.h> | |
| // Add new monitors based on CONFIG_HA_MON_EVENTS_ID here | |
| #endif | |
| #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 <monitors/pagefault/pagefault_trace.h> | |
| #include <monitors/sleep/sleep_trace.h> | |
| #include <monitors/wakeup/wakeup_trace.h> | |
| // 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 <trace/define_trace.h> |