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 unsigned int prev_state, 29 struct task_struct *prev, 30 struct task_struct *next), 31 32 TP_ARGS(preempt, prev_state, prev, next), 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> 97