@@ -137,6 +137,250 @@ DEFINE_IRQ_VECTOR_EVENT(deferred_error_apic);
137
137
DEFINE_IRQ_VECTOR_EVENT (thermal_apic );
138
138
#endif
139
139
140
+ TRACE_EVENT (vector_config ,
141
+
142
+ TP_PROTO (unsigned int irq , unsigned int vector ,
143
+ unsigned int cpu , unsigned int apicdest ),
144
+
145
+ TP_ARGS (irq , vector , cpu , apicdest ),
146
+
147
+ TP_STRUCT__entry (
148
+ __field ( unsigned int , irq )
149
+ __field ( unsigned int , vector )
150
+ __field ( unsigned int , cpu )
151
+ __field ( unsigned int , apicdest )
152
+ ),
153
+
154
+ TP_fast_assign (
155
+ __entry -> irq = irq ;
156
+ __entry -> vector = vector ;
157
+ __entry -> cpu = cpu ;
158
+ __entry -> apicdest = apicdest ;
159
+ ),
160
+
161
+ TP_printk ("irq=%u vector=%u cpu=%u apicdest=0x%08x" ,
162
+ __entry -> irq , __entry -> vector , __entry -> cpu ,
163
+ __entry -> apicdest )
164
+ );
165
+
166
+ DECLARE_EVENT_CLASS (vector_mod ,
167
+
168
+ TP_PROTO (unsigned int irq , unsigned int vector ,
169
+ unsigned int cpu , unsigned int prev_vector ,
170
+ unsigned int prev_cpu ),
171
+
172
+ TP_ARGS (irq , vector , cpu , prev_vector , prev_cpu ),
173
+
174
+ TP_STRUCT__entry (
175
+ __field ( unsigned int , irq )
176
+ __field ( unsigned int , vector )
177
+ __field ( unsigned int , cpu )
178
+ __field ( unsigned int , prev_vector )
179
+ __field ( unsigned int , prev_cpu )
180
+ ),
181
+
182
+ TP_fast_assign (
183
+ __entry -> irq = irq ;
184
+ __entry -> vector = vector ;
185
+ __entry -> cpu = cpu ;
186
+ __entry -> prev_vector = prev_vector ;
187
+ __entry -> prev_cpu = prev_cpu ;
188
+
189
+ ),
190
+
191
+ TP_printk ("irq=%u vector=%u cpu=%u prev_vector=%u prev_cpu=%u" ,
192
+ __entry -> irq , __entry -> vector , __entry -> cpu ,
193
+ __entry -> prev_vector , __entry -> prev_cpu )
194
+ );
195
+
196
+ #define DEFINE_IRQ_VECTOR_MOD_EVENT (name ) \
197
+ DEFINE_EVENT_FN(vector_mod, name, \
198
+ TP_PROTO(unsigned int irq, unsigned int vector, \
199
+ unsigned int cpu, unsigned int prev_vector, \
200
+ unsigned int prev_cpu), \
201
+ TP_ARGS(irq, vector, cpu, prev_vector, prev_cpu), NULL, NULL); \
202
+
203
+ DEFINE_IRQ_VECTOR_MOD_EVENT (vector_update );
204
+ DEFINE_IRQ_VECTOR_MOD_EVENT (vector_clear );
205
+
206
+ DECLARE_EVENT_CLASS (vector_reserve ,
207
+
208
+ TP_PROTO (unsigned int irq , int ret ),
209
+
210
+ TP_ARGS (irq , ret ),
211
+
212
+ TP_STRUCT__entry (
213
+ __field ( unsigned int , irq )
214
+ __field ( int , ret )
215
+ ),
216
+
217
+ TP_fast_assign (
218
+ __entry -> irq = irq ;
219
+ __entry -> ret = ret ;
220
+ ),
221
+
222
+ TP_printk ("irq=%u ret=%d" , __entry -> irq , __entry -> ret )
223
+ );
224
+
225
+ #define DEFINE_IRQ_VECTOR_RESERVE_EVENT (name ) \
226
+ DEFINE_EVENT_FN(vector_reserve, name, \
227
+ TP_PROTO(unsigned int irq, int ret), \
228
+ TP_ARGS(irq, ret), NULL, NULL); \
229
+
230
+ DEFINE_IRQ_VECTOR_RESERVE_EVENT (vector_reserve_managed );
231
+ DEFINE_IRQ_VECTOR_RESERVE_EVENT (vector_reserve );
232
+
233
+ TRACE_EVENT (vector_alloc ,
234
+
235
+ TP_PROTO (unsigned int irq , unsigned int vector , bool reserved ,
236
+ int ret ),
237
+
238
+ TP_ARGS (irq , vector , ret , reserved ),
239
+
240
+ TP_STRUCT__entry (
241
+ __field ( unsigned int , irq )
242
+ __field ( unsigned int , vector )
243
+ __field ( bool , reserved )
244
+ __field ( int , ret )
245
+ ),
246
+
247
+ TP_fast_assign (
248
+ __entry -> irq = irq ;
249
+ __entry -> vector = ret < 0 ? 0 : vector ;
250
+ __entry -> reserved = reserved ;
251
+ __entry -> ret = ret > 0 ? 0 : ret ;
252
+ ),
253
+
254
+ TP_printk ("irq=%u vector=%u reserved=%d ret=%d" ,
255
+ __entry -> irq , __entry -> vector ,
256
+ __entry -> reserved , __entry -> ret )
257
+ );
258
+
259
+ TRACE_EVENT (vector_alloc_managed ,
260
+
261
+ TP_PROTO (unsigned int irq , unsigned int vector ,
262
+ int ret ),
263
+
264
+ TP_ARGS (irq , vector , ret ),
265
+
266
+ TP_STRUCT__entry (
267
+ __field ( unsigned int , irq )
268
+ __field ( unsigned int , vector )
269
+ __field ( int , ret )
270
+ ),
271
+
272
+ TP_fast_assign (
273
+ __entry -> irq = irq ;
274
+ __entry -> vector = ret < 0 ? 0 : vector ;
275
+ __entry -> ret = ret > 0 ? 0 : ret ;
276
+ ),
277
+
278
+ TP_printk ("irq=%u vector=%u ret=%d" ,
279
+ __entry -> irq , __entry -> vector , __entry -> ret )
280
+ );
281
+
282
+ DECLARE_EVENT_CLASS (vector_activate ,
283
+
284
+ TP_PROTO (unsigned int irq , bool is_managed , bool can_reserve ,
285
+ bool early ),
286
+
287
+ TP_ARGS (irq , is_managed , can_reserve , early ),
288
+
289
+ TP_STRUCT__entry (
290
+ __field ( unsigned int , irq )
291
+ __field ( bool , is_managed )
292
+ __field ( bool , can_reserve )
293
+ __field ( bool , early )
294
+ ),
295
+
296
+ TP_fast_assign (
297
+ __entry -> irq = irq ;
298
+ __entry -> is_managed = is_managed ;
299
+ __entry -> can_reserve = can_reserve ;
300
+ __entry -> early = early ;
301
+ ),
302
+
303
+ TP_printk ("irq=%u is_managed=%d can_reserve=%d early=%d" ,
304
+ __entry -> irq , __entry -> is_managed , __entry -> can_reserve ,
305
+ __entry -> early )
306
+ );
307
+
308
+ #define DEFINE_IRQ_VECTOR_ACTIVATE_EVENT (name ) \
309
+ DEFINE_EVENT_FN(vector_activate, name, \
310
+ TP_PROTO(unsigned int irq, bool is_managed, \
311
+ bool can_reserve, bool early), \
312
+ TP_ARGS(irq, is_managed, can_reserve, early), NULL, NULL); \
313
+
314
+ DEFINE_IRQ_VECTOR_ACTIVATE_EVENT (vector_activate );
315
+ DEFINE_IRQ_VECTOR_ACTIVATE_EVENT (vector_deactivate );
316
+
317
+ TRACE_EVENT (vector_teardown ,
318
+
319
+ TP_PROTO (unsigned int irq , bool is_managed , bool has_reserved ),
320
+
321
+ TP_ARGS (irq , is_managed , has_reserved ),
322
+
323
+ TP_STRUCT__entry (
324
+ __field ( unsigned int , irq )
325
+ __field ( bool , is_managed )
326
+ __field ( bool , has_reserved )
327
+ ),
328
+
329
+ TP_fast_assign (
330
+ __entry -> irq = irq ;
331
+ __entry -> is_managed = is_managed ;
332
+ __entry -> has_reserved = has_reserved ;
333
+ ),
334
+
335
+ TP_printk ("irq=%u is_managed=%d has_reserved=%d" ,
336
+ __entry -> irq , __entry -> is_managed , __entry -> has_reserved )
337
+ );
338
+
339
+ TRACE_EVENT (vector_setup ,
340
+
341
+ TP_PROTO (unsigned int irq , bool is_legacy , int ret ),
342
+
343
+ TP_ARGS (irq , is_legacy , ret ),
344
+
345
+ TP_STRUCT__entry (
346
+ __field ( unsigned int , irq )
347
+ __field ( bool , is_legacy )
348
+ __field ( int , ret )
349
+ ),
350
+
351
+ TP_fast_assign (
352
+ __entry -> irq = irq ;
353
+ __entry -> is_legacy = is_legacy ;
354
+ __entry -> ret = ret ;
355
+ ),
356
+
357
+ TP_printk ("irq=%u is_legacy=%d ret=%d" ,
358
+ __entry -> irq , __entry -> is_legacy , __entry -> ret )
359
+ );
360
+
361
+ TRACE_EVENT (vector_free_moved ,
362
+
363
+ TP_PROTO (unsigned int irq , unsigned int vector , bool is_managed ),
364
+
365
+ TP_ARGS (irq , vector , is_managed ),
366
+
367
+ TP_STRUCT__entry (
368
+ __field ( unsigned int , irq )
369
+ __field ( unsigned int , vector )
370
+ __field ( bool , is_managed )
371
+ ),
372
+
373
+ TP_fast_assign (
374
+ __entry -> irq = irq ;
375
+ __entry -> vector = vector ;
376
+ __entry -> is_managed = is_managed ;
377
+ ),
378
+
379
+ TP_printk ("irq=%u vector=%u is_managed=%d" ,
380
+ __entry -> irq , __entry -> vector , __entry -> is_managed )
381
+ );
382
+
383
+
140
384
#endif /* CONFIG_X86_LOCAL_APIC */
141
385
142
386
#undef TRACE_INCLUDE_PATH
0 commit comments