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 #ifdef CONFIG_HA_MON_EVENTS_IMPLICIT 68 /* For simplicity this class is marked as DA although relevant only for HA */ 69 DECLARE_EVENT_CLASS(error_env_da_monitor, 70 71 TP_PROTO(char *state, char *event, char *env), 72 73 TP_ARGS(state, event, env), 74 75 TP_STRUCT__entry( 76 __string( state, state ) 77 __string( event, event ) 78 __string( env, env ) 79 ), 80 81 TP_fast_assign( 82 __assign_str(state); 83 __assign_str(event); 84 __assign_str(env); 85 ), 86 87 TP_printk("event %s not expected in the state %s with env %s", 88 __get_str(event), 89 __get_str(state), 90 __get_str(env)) 91 ); 92 93 #include <monitors/opid/opid_trace.h> 94 // Add new monitors based on CONFIG_HA_MON_EVENTS_IMPLICIT here 95 96 #endif 97 98 #endif /* CONFIG_DA_MON_EVENTS_IMPLICIT */ 99 100 #ifdef CONFIG_DA_MON_EVENTS_ID 101 DECLARE_EVENT_CLASS(event_da_monitor_id, 102 103 TP_PROTO(int id, char *state, char *event, char *next_state, bool final_state), 104 105 TP_ARGS(id, state, event, next_state, final_state), 106 107 TP_STRUCT__entry( 108 __field( int, id ) 109 __string( state, state ) 110 __string( event, event ) 111 __string( next_state, next_state ) 112 __field( bool, final_state ) 113 ), 114 115 TP_fast_assign( 116 __assign_str(state); 117 __assign_str(event); 118 __assign_str(next_state); 119 __entry->id = id; 120 __entry->final_state = final_state; 121 ), 122 123 TP_printk("%d: %s x %s -> %s%s", 124 __entry->id, 125 __get_str(state), 126 __get_str(event), 127 __get_str(next_state), 128 __entry->final_state ? " (final)" : "") 129 ); 130 131 DECLARE_EVENT_CLASS(error_da_monitor_id, 132 133 TP_PROTO(int id, char *state, char *event), 134 135 TP_ARGS(id, state, event), 136 137 TP_STRUCT__entry( 138 __field( int, id ) 139 __string( state, state ) 140 __string( event, event ) 141 ), 142 143 TP_fast_assign( 144 __assign_str(state); 145 __assign_str(event); 146 __entry->id = id; 147 ), 148 149 TP_printk("%d: event %s not expected in the state %s", 150 __entry->id, 151 __get_str(event), 152 __get_str(state)) 153 ); 154 155 #include <monitors/wwnr/wwnr_trace.h> 156 #include <monitors/snroc/snroc_trace.h> 157 #include <monitors/nrp/nrp_trace.h> 158 #include <monitors/sssw/sssw_trace.h> 159 // Add new monitors based on CONFIG_DA_MON_EVENTS_ID here 160 161 #ifdef CONFIG_HA_MON_EVENTS_ID 162 /* For simplicity this class is marked as DA although relevant only for HA */ 163 DECLARE_EVENT_CLASS(error_env_da_monitor_id, 164 165 TP_PROTO(int id, char *state, char *event, char *env), 166 167 TP_ARGS(id, state, event, env), 168 169 TP_STRUCT__entry( 170 __field( int, id ) 171 __string( state, state ) 172 __string( event, event ) 173 __string( env, env ) 174 ), 175 176 TP_fast_assign( 177 __assign_str(state); 178 __assign_str(event); 179 __assign_str(env); 180 __entry->id = id; 181 ), 182 183 TP_printk("%d: event %s not expected in the state %s with env %s", 184 __entry->id, 185 __get_str(event), 186 __get_str(state), 187 __get_str(env)) 188 ); 189 190 #include <monitors/stall/stall_trace.h> 191 #include <monitors/nomiss/nomiss_trace.h> 192 // Add new monitors based on CONFIG_HA_MON_EVENTS_ID here 193 194 #endif 195 196 #endif /* CONFIG_DA_MON_EVENTS_ID */ 197 #ifdef CONFIG_LTL_MON_EVENTS_ID 198 DECLARE_EVENT_CLASS(event_ltl_monitor_id, 199 200 TP_PROTO(struct task_struct *task, char *states, char *atoms, char *next), 201 202 TP_ARGS(task, states, atoms, next), 203 204 TP_STRUCT__entry( 205 __string(comm, task->comm) 206 __field(pid_t, pid) 207 __string(states, states) 208 __string(atoms, atoms) 209 __string(next, next) 210 ), 211 212 TP_fast_assign( 213 __assign_str(comm); 214 __entry->pid = task->pid; 215 __assign_str(states); 216 __assign_str(atoms); 217 __assign_str(next); 218 ), 219 220 TP_printk("%s[%d]: (%s) x (%s) -> (%s)", __get_str(comm), __entry->pid, 221 __get_str(states), __get_str(atoms), __get_str(next)) 222 ); 223 224 DECLARE_EVENT_CLASS(error_ltl_monitor_id, 225 226 TP_PROTO(struct task_struct *task), 227 228 TP_ARGS(task), 229 230 TP_STRUCT__entry( 231 __string(comm, task->comm) 232 __field(pid_t, pid) 233 ), 234 235 TP_fast_assign( 236 __assign_str(comm); 237 __entry->pid = task->pid; 238 ), 239 240 TP_printk("%s[%d]: violation detected", __get_str(comm), __entry->pid) 241 ); 242 #include <monitors/pagefault/pagefault_trace.h> 243 #include <monitors/sleep/sleep_trace.h> 244 // Add new monitors based on CONFIG_LTL_MON_EVENTS_ID here 245 #endif /* CONFIG_LTL_MON_EVENTS_ID */ 246 247 #ifdef CONFIG_RV_MON_MAINTENANCE_EVENTS 248 /* Tracepoint useful for monitors development, currenly only used in DA */ 249 TRACE_EVENT(rv_retries_error, 250 251 TP_PROTO(char *name, char *event), 252 253 TP_ARGS(name, event), 254 255 TP_STRUCT__entry( 256 __string( name, name ) 257 __string( event, event ) 258 ), 259 260 TP_fast_assign( 261 __assign_str(name); 262 __assign_str(event); 263 ), 264 265 TP_printk(__stringify(MAX_DA_RETRY_RACING_EVENTS) 266 " retries reached for event %s, resetting monitor %s", 267 __get_str(event), __get_str(name)) 268 ); 269 #endif /* CONFIG_RV_MON_MAINTENANCE_EVENTS */ 270 #endif /* _TRACE_RV_H */ 271 272 /* This part must be outside protection */ 273 #undef TRACE_INCLUDE_PATH 274 #define TRACE_INCLUDE_PATH . 275 #undef TRACE_INCLUDE_FILE 276 #define TRACE_INCLUDE_FILE rv_trace 277 #include <trace/define_trace.h> 278