1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM rv 4 5 #if !defined(_TRACE_RV_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_RV_H 7 8 #include <linux/rv.h> 9 #include <linux/tracepoint.h> 10 11 #ifdef CONFIG_DA_MON_EVENTS_IMPLICIT 12 DECLARE_EVENT_CLASS(event_da_monitor, 13 14 TP_PROTO(char *state, char *event, char *next_state, bool final_state), 15 16 TP_ARGS(state, event, next_state, final_state), 17 18 TP_STRUCT__entry( 19 __string( state, state ) 20 __string( event, event ) 21 __string( next_state, next_state ) 22 __field( bool, final_state ) 23 ), 24 25 TP_fast_assign( 26 __assign_str(state); 27 __assign_str(event); 28 __assign_str(next_state); 29 __entry->final_state = final_state; 30 ), 31 32 TP_printk("%s x %s -> %s%s", 33 __get_str(state), 34 __get_str(event), 35 __get_str(next_state), 36 __entry->final_state ? " (final)" : "") 37 ); 38 39 DECLARE_EVENT_CLASS(error_da_monitor, 40 41 TP_PROTO(char *state, char *event), 42 43 TP_ARGS(state, event), 44 45 TP_STRUCT__entry( 46 __string( state, state ) 47 __string( event, event ) 48 ), 49 50 TP_fast_assign( 51 __assign_str(state); 52 __assign_str(event); 53 ), 54 55 TP_printk("event %s not expected in the state %s", 56 __get_str(event), 57 __get_str(state)) 58 ); 59 60 #include <monitors/wip/wip_trace.h> 61 #include <monitors/sco/sco_trace.h> 62 #include <monitors/scpd/scpd_trace.h> 63 #include <monitors/snep/snep_trace.h> 64 #include <monitors/sts/sts_trace.h> 65 // Add new monitors based on CONFIG_DA_MON_EVENTS_IMPLICIT here 66 67 #endif /* CONFIG_DA_MON_EVENTS_IMPLICIT */ 68 69 #ifdef CONFIG_DA_MON_EVENTS_ID 70 DECLARE_EVENT_CLASS(event_da_monitor_id, 71 72 TP_PROTO(int id, char *state, char *event, char *next_state, bool final_state), 73 74 TP_ARGS(id, state, event, next_state, final_state), 75 76 TP_STRUCT__entry( 77 __field( int, id ) 78 __string( state, state ) 79 __string( event, event ) 80 __string( next_state, next_state ) 81 __field( bool, final_state ) 82 ), 83 84 TP_fast_assign( 85 __assign_str(state); 86 __assign_str(event); 87 __assign_str(next_state); 88 __entry->id = id; 89 __entry->final_state = final_state; 90 ), 91 92 TP_printk("%d: %s x %s -> %s%s", 93 __entry->id, 94 __get_str(state), 95 __get_str(event), 96 __get_str(next_state), 97 __entry->final_state ? " (final)" : "") 98 ); 99 100 DECLARE_EVENT_CLASS(error_da_monitor_id, 101 102 TP_PROTO(int id, char *state, char *event), 103 104 TP_ARGS(id, state, event), 105 106 TP_STRUCT__entry( 107 __field( int, id ) 108 __string( state, state ) 109 __string( event, event ) 110 ), 111 112 TP_fast_assign( 113 __assign_str(state); 114 __assign_str(event); 115 __entry->id = id; 116 ), 117 118 TP_printk("%d: event %s not expected in the state %s", 119 __entry->id, 120 __get_str(event), 121 __get_str(state)) 122 ); 123 124 #include <monitors/wwnr/wwnr_trace.h> 125 #include <monitors/snroc/snroc_trace.h> 126 #include <monitors/nrp/nrp_trace.h> 127 #include <monitors/sssw/sssw_trace.h> 128 // Add new monitors based on CONFIG_DA_MON_EVENTS_ID here 129 130 #endif /* CONFIG_DA_MON_EVENTS_ID */ 131 #ifdef CONFIG_LTL_MON_EVENTS_ID 132 DECLARE_EVENT_CLASS(event_ltl_monitor_id, 133 134 TP_PROTO(struct task_struct *task, char *states, char *atoms, char *next), 135 136 TP_ARGS(task, states, atoms, next), 137 138 TP_STRUCT__entry( 139 __string(comm, task->comm) 140 __field(pid_t, pid) 141 __string(states, states) 142 __string(atoms, atoms) 143 __string(next, next) 144 ), 145 146 TP_fast_assign( 147 __assign_str(comm); 148 __entry->pid = task->pid; 149 __assign_str(states); 150 __assign_str(atoms); 151 __assign_str(next); 152 ), 153 154 TP_printk("%s[%d]: (%s) x (%s) -> (%s)", __get_str(comm), __entry->pid, 155 __get_str(states), __get_str(atoms), __get_str(next)) 156 ); 157 158 DECLARE_EVENT_CLASS(error_ltl_monitor_id, 159 160 TP_PROTO(struct task_struct *task), 161 162 TP_ARGS(task), 163 164 TP_STRUCT__entry( 165 __string(comm, task->comm) 166 __field(pid_t, pid) 167 ), 168 169 TP_fast_assign( 170 __assign_str(comm); 171 __entry->pid = task->pid; 172 ), 173 174 TP_printk("%s[%d]: violation detected", __get_str(comm), __entry->pid) 175 ); 176 #include <monitors/pagefault/pagefault_trace.h> 177 #include <monitors/sleep/sleep_trace.h> 178 // Add new monitors based on CONFIG_LTL_MON_EVENTS_ID here 179 #endif /* CONFIG_LTL_MON_EVENTS_ID */ 180 181 #ifdef CONFIG_RV_MON_MAINTENANCE_EVENTS 182 /* Tracepoint useful for monitors development, currenly only used in DA */ 183 TRACE_EVENT(rv_retries_error, 184 185 TP_PROTO(char *name, char *event), 186 187 TP_ARGS(name, event), 188 189 TP_STRUCT__entry( 190 __string( name, name ) 191 __string( event, event ) 192 ), 193 194 TP_fast_assign( 195 __assign_str(name); 196 __assign_str(event); 197 ), 198 199 TP_printk(__stringify(MAX_DA_RETRY_RACING_EVENTS) 200 " retries reached for event %s, resetting monitor %s", 201 __get_str(event), __get_str(name)) 202 ); 203 #endif /* CONFIG_RV_MON_MAINTENANCE_EVENTS */ 204 #endif /* _TRACE_RV_H */ 205 206 /* This part must be outside protection */ 207 #undef TRACE_INCLUDE_PATH 208 #define TRACE_INCLUDE_PATH . 209 #undef TRACE_INCLUDE_FILE 210 #define TRACE_INCLUDE_FILE rv_trace 211 #include <trace/define_trace.h> 212