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