Commit | Line | Data |
---|---|---|
3a73333f SRG |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | ||
3 | /* | |
4 | * Like the headers that use TRACE_EVENT(), the TRACE_CUSTOM_EVENT() | |
5 | * needs a header that allows for multiple inclusions. | |
6 | * | |
7 | * Test for a unique name (here we have _TRACE_CUSTOM_SCHED_H), | |
8 | * also allowing to continue if TRACE_CUSTOM_MULTI_READ is defined. | |
9 | */ | |
10 | #if !defined(_TRACE_CUSTOM_SCHED_H) || defined(TRACE_CUSTOM_MULTI_READ) | |
11 | #define _TRACE_CUSTOM_SCHED_H | |
12 | ||
13 | /* Include linux/trace_events.h for initial defines of TRACE_CUSTOM_EVENT() */ | |
14 | #include <linux/trace_events.h> | |
15 | ||
16 | /* | |
17 | * TRACE_CUSTOM_EVENT() is just like TRACE_EVENT(). The first parameter | |
18 | * is the event name of an existing event where the TRACE_EVENT has been included | |
19 | * in the C file before including this file. | |
20 | */ | |
21 | TRACE_CUSTOM_EVENT(sched_switch, | |
22 | ||
23 | /* | |
24 | * The TP_PROTO() and TP_ARGS must match the trace event | |
25 | * that the custom event is using. | |
26 | */ | |
27 | TP_PROTO(bool preempt, | |
28 | struct task_struct *prev, | |
9c2136be DK |
29 | struct task_struct *next, |
30 | unsigned int prev_state), | |
3a73333f | 31 | |
9c2136be | 32 | TP_ARGS(preempt, prev, next, prev_state), |
3a73333f SRG |
33 | |
34 | /* | |
35 | * The next fields are where the customization happens. | |
36 | * The TP_STRUCT__entry() defines what will be recorded | |
37 | * in the ring buffer when the custom event triggers. | |
38 | * | |
39 | * The rest is just like the TRACE_EVENT() macro except that | |
40 | * it uses the custom entry. | |
41 | */ | |
42 | TP_STRUCT__entry( | |
43 | __field( unsigned short, prev_prio ) | |
44 | __field( unsigned short, next_prio ) | |
45 | __field( pid_t, next_pid ) | |
46 | ), | |
47 | ||
48 | TP_fast_assign( | |
49 | __entry->prev_prio = prev->prio; | |
50 | __entry->next_pid = next->pid; | |
51 | __entry->next_prio = next->prio; | |
52 | ), | |
53 | ||
54 | TP_printk("prev_prio=%d next_pid=%d next_prio=%d", | |
55 | __entry->prev_prio, __entry->next_pid, __entry->next_prio) | |
56 | ) | |
57 | ||
58 | ||
59 | TRACE_CUSTOM_EVENT(sched_waking, | |
60 | ||
61 | TP_PROTO(struct task_struct *p), | |
62 | ||
63 | TP_ARGS(p), | |
64 | ||
65 | TP_STRUCT__entry( | |
66 | __field( pid_t, pid ) | |
67 | __field( unsigned short, prio ) | |
68 | ), | |
69 | ||
70 | TP_fast_assign( | |
71 | __entry->pid = p->pid; | |
72 | __entry->prio = p->prio; | |
73 | ), | |
74 | ||
75 | TP_printk("pid=%d prio=%d", __entry->pid, __entry->prio) | |
76 | ) | |
77 | #endif | |
78 | /* | |
79 | * Just like the headers that create TRACE_EVENTs, the below must | |
80 | * be outside the protection of the above #if block. | |
81 | */ | |
82 | ||
83 | /* | |
84 | * It is required that the Makefile includes: | |
85 | * CFLAGS_<c_file>.o := -I$(src) | |
86 | */ | |
87 | #undef TRACE_INCLUDE_PATH | |
88 | #undef TRACE_INCLUDE_FILE | |
89 | #define TRACE_INCLUDE_PATH . | |
90 | ||
91 | /* | |
92 | * It is requred that the TRACE_INCLUDE_FILE be the same | |
93 | * as this file without the ".h". | |
94 | */ | |
95 | #define TRACE_INCLUDE_FILE trace_custom_sched | |
96 | #include <trace/define_custom_trace.h> |