Merge patch series "RISC-V: Align the shadow stack"
[platform/kernel/linux-rpi.git] / samples / trace_events / trace_custom_sched.h
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,
29                  struct task_struct *next,
30                  unsigned int prev_state),
31
32         TP_ARGS(preempt, prev, next, prev_state),
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>