1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #undef TRACE_SYSTEM 4 #define TRACE_SYSTEM timer_migration 5 6 #if !defined(_TRACE_TIMER_MIGRATION_H) || defined(TRACE_HEADER_MULTI_READ) 7 #define _TRACE_TIMER_MIGRATION_H 8 9 #include <linux/tracepoint.h> 10 11 /* Group events */ 12 TRACE_EVENT(tmigr_group_set, 13 14 TP_PROTO(struct tmigr_group *group), 15 16 TP_ARGS(group), 17 18 TP_STRUCT__entry( 19 __field( void *, group ) 20 __field( unsigned int, lvl ) 21 __field( unsigned int, numa_node ) 22 ), 23 24 TP_fast_assign( 25 __entry->group = group; 26 __entry->lvl = group->level; 27 __entry->numa_node = group->numa_node; 28 ), 29 30 TP_printk("group=%p lvl=%d numa=%d", 31 __entry->group, __entry->lvl, __entry->numa_node) 32 ); 33 34 TRACE_EVENT(tmigr_connect_child_parent, 35 36 TP_PROTO(struct tmigr_hierarchy *hier, struct tmigr_group *child), 37 38 TP_ARGS(hier, child), 39 40 TP_STRUCT__entry( 41 __field( void *, child ) 42 __field( void *, parent ) 43 __field( unsigned int, lvl ) 44 __field( unsigned int, numa_node ) 45 __field( unsigned int, capacity ) 46 __field( unsigned int, num_children ) 47 __field( u32, groupmask ) 48 ), 49 50 TP_fast_assign( 51 __entry->child = child; 52 __entry->parent = child->parent; 53 __entry->lvl = child->parent->level; 54 __entry->numa_node = child->parent->numa_node; 55 __entry->capacity = hier->capacity; 56 __entry->num_children = child->parent->num_children; 57 __entry->groupmask = child->groupmask; 58 ), 59 60 TP_printk("group=%p groupmask=%0x parent=%p lvl=%d numa=%d capacity=%d num_children=%d", 61 __entry->child, __entry->groupmask, __entry->parent, __entry->lvl, 62 __entry->numa_node, __entry->capacity, __entry->num_children) 63 ); 64 65 TRACE_EVENT(tmigr_connect_cpu_parent, 66 67 TP_PROTO(struct tmigr_hierarchy *hier, struct tmigr_cpu *tmc), 68 69 TP_ARGS(hier, tmc), 70 71 TP_STRUCT__entry( 72 __field( void *, parent ) 73 __field( unsigned int, cpu ) 74 __field( unsigned int, lvl ) 75 __field( unsigned int, numa_node ) 76 __field( unsigned int, capacity ) 77 __field( unsigned int, num_children ) 78 __field( u32, groupmask ) 79 ), 80 81 TP_fast_assign( 82 __entry->parent = tmc->tmgroup; 83 __entry->cpu = tmc->cpuevt.cpu; 84 __entry->lvl = tmc->tmgroup->level; 85 __entry->numa_node = tmc->tmgroup->numa_node; 86 __entry->capacity = hier->capacity; 87 __entry->num_children = tmc->tmgroup->num_children; 88 __entry->groupmask = tmc->groupmask; 89 ), 90 91 TP_printk("cpu=%d groupmask=%0x parent=%p lvl=%d numa=%d capacity=%d num_children=%d", 92 __entry->cpu, __entry->groupmask, __entry->parent, __entry->lvl, 93 __entry->numa_node, __entry->capacity, __entry->num_children) 94 ); 95 96 DECLARE_EVENT_CLASS(tmigr_group_and_cpu, 97 98 TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask), 99 100 TP_ARGS(group, state, childmask), 101 102 TP_STRUCT__entry( 103 __field( void *, group ) 104 __field( void *, parent ) 105 __field( unsigned int, lvl ) 106 __field( unsigned int, numa_node ) 107 __field( u32, childmask ) 108 __field( u8, active ) 109 __field( u8, migrator ) 110 ), 111 112 TP_fast_assign( 113 __entry->group = group; 114 __entry->parent = group->parent; 115 __entry->lvl = group->level; 116 __entry->numa_node = group->numa_node; 117 __entry->childmask = childmask; 118 __entry->active = state.active; 119 __entry->migrator = state.migrator; 120 ), 121 122 TP_printk("group=%p lvl=%d numa=%d active=%0x migrator=%0x " 123 "parent=%p childmask=%0x", 124 __entry->group, __entry->lvl, __entry->numa_node, 125 __entry->active, __entry->migrator, 126 __entry->parent, __entry->childmask) 127 ); 128 129 DEFINE_EVENT(tmigr_group_and_cpu, tmigr_group_set_cpu_inactive, 130 131 TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask), 132 133 TP_ARGS(group, state, childmask) 134 ); 135 136 DEFINE_EVENT(tmigr_group_and_cpu, tmigr_group_set_cpu_active, 137 138 TP_PROTO(struct tmigr_group *group, union tmigr_state state, u32 childmask), 139 140 TP_ARGS(group, state, childmask) 141 ); 142 143 /* CPU events*/ 144 DECLARE_EVENT_CLASS(tmigr_cpugroup, 145 146 TP_PROTO(struct tmigr_cpu *tmc), 147 148 TP_ARGS(tmc), 149 150 TP_STRUCT__entry( 151 __field( u64, wakeup ) 152 __field( void *, parent ) 153 __field( unsigned int, cpu ) 154 155 ), 156 157 TP_fast_assign( 158 __entry->wakeup = tmc->wakeup; 159 __entry->parent = tmc->tmgroup; 160 __entry->cpu = tmc->cpuevt.cpu; 161 ), 162 163 TP_printk("cpu=%d parent=%p wakeup=%llu", __entry->cpu, __entry->parent, __entry->wakeup) 164 ); 165 166 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_new_timer, 167 168 TP_PROTO(struct tmigr_cpu *tmc), 169 170 TP_ARGS(tmc) 171 ); 172 173 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_active, 174 175 TP_PROTO(struct tmigr_cpu *tmc), 176 177 TP_ARGS(tmc) 178 ); 179 180 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_available, 181 182 TP_PROTO(struct tmigr_cpu *tmc), 183 184 TP_ARGS(tmc) 185 ); 186 187 DEFINE_EVENT(tmigr_cpugroup, tmigr_cpu_unavailable, 188 189 TP_PROTO(struct tmigr_cpu *tmc), 190 191 TP_ARGS(tmc) 192 ); 193 194 DEFINE_EVENT(tmigr_cpugroup, tmigr_handle_remote_cpu, 195 196 TP_PROTO(struct tmigr_cpu *tmc), 197 198 TP_ARGS(tmc) 199 ); 200 201 DECLARE_EVENT_CLASS(tmigr_idle, 202 203 TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt), 204 205 TP_ARGS(tmc, nextevt), 206 207 TP_STRUCT__entry( 208 __field( u64, nextevt) 209 __field( u64, wakeup) 210 __field( void *, parent) 211 __field( unsigned int, cpu) 212 ), 213 214 TP_fast_assign( 215 __entry->nextevt = nextevt; 216 __entry->wakeup = tmc->wakeup; 217 __entry->parent = tmc->tmgroup; 218 __entry->cpu = tmc->cpuevt.cpu; 219 ), 220 221 TP_printk("cpu=%d parent=%p nextevt=%llu wakeup=%llu", 222 __entry->cpu, __entry->parent, __entry->nextevt, __entry->wakeup) 223 ); 224 225 DEFINE_EVENT(tmigr_idle, tmigr_cpu_idle, 226 227 TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt), 228 229 TP_ARGS(tmc, nextevt) 230 ); 231 232 DEFINE_EVENT(tmigr_idle, tmigr_cpu_new_timer_idle, 233 234 TP_PROTO(struct tmigr_cpu *tmc, u64 nextevt), 235 236 TP_ARGS(tmc, nextevt) 237 ); 238 239 TRACE_EVENT(tmigr_update_events, 240 241 TP_PROTO(struct tmigr_group *child, struct tmigr_group *group, 242 union tmigr_state childstate, union tmigr_state groupstate, 243 u64 nextevt), 244 245 TP_ARGS(child, group, childstate, groupstate, nextevt), 246 247 TP_STRUCT__entry( 248 __field( void *, child ) 249 __field( void *, group ) 250 __field( u64, nextevt ) 251 __field( u64, group_next_expiry ) 252 __field( u64, child_evt_expiry ) 253 __field( unsigned int, group_lvl ) 254 __field( unsigned int, child_evtcpu ) 255 __field( u8, child_active ) 256 __field( u8, group_active ) 257 ), 258 259 TP_fast_assign( 260 __entry->child = child; 261 __entry->group = group; 262 __entry->nextevt = nextevt; 263 __entry->group_next_expiry = group->next_expiry; 264 __entry->child_evt_expiry = child ? child->groupevt.nextevt.expires : 0; 265 __entry->group_lvl = group->level; 266 __entry->child_evtcpu = child ? child->groupevt.cpu : 0; 267 __entry->child_active = childstate.active; 268 __entry->group_active = groupstate.active; 269 ), 270 271 TP_printk("child=%p group=%p group_lvl=%d child_active=%0x group_active=%0x " 272 "nextevt=%llu next_expiry=%llu child_evt_expiry=%llu child_evtcpu=%d", 273 __entry->child, __entry->group, __entry->group_lvl, __entry->child_active, 274 __entry->group_active, 275 __entry->nextevt, __entry->group_next_expiry, __entry->child_evt_expiry, 276 __entry->child_evtcpu) 277 ); 278 279 TRACE_EVENT(tmigr_handle_remote, 280 281 TP_PROTO(struct tmigr_group *group), 282 283 TP_ARGS(group), 284 285 TP_STRUCT__entry( 286 __field( void * , group ) 287 __field( unsigned int , lvl ) 288 ), 289 290 TP_fast_assign( 291 __entry->group = group; 292 __entry->lvl = group->level; 293 ), 294 295 TP_printk("group=%p lvl=%d", 296 __entry->group, __entry->lvl) 297 ); 298 299 #endif /* _TRACE_TIMER_MIGRATION_H */ 300 301 /* This part must be outside protection */ 302 #include <trace/define_trace.h> 303