| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Like the headers that use TRACE_EVENT(), the TRACE_CUSTOM_EVENT() | |
| * needs a header that allows for multiple inclusions. | |
| * | |
| * Test for a unique name (here we have _TRACE_CUSTOM_SCHED_H), | |
| * also allowing to continue if TRACE_CUSTOM_MULTI_READ is defined. | |
| */ | |
| #if !defined(_TRACE_CUSTOM_SCHED_H) || defined(TRACE_CUSTOM_MULTI_READ) | |
| #define _TRACE_CUSTOM_SCHED_H | |
| /* Include linux/trace_events.h for initial defines of TRACE_CUSTOM_EVENT() */ | |
| #include <linux/trace_events.h> | |
| /* | |
| * TRACE_CUSTOM_EVENT() is just like TRACE_EVENT(). The first parameter | |
| * is the event name of an existing event where the TRACE_EVENT has been included | |
| * in the C file before including this file. | |
| */ | |
| TRACE_CUSTOM_EVENT(sched_switch, | |
| /* | |
| * The TP_PROTO() and TP_ARGS must match the trace event | |
| * that the custom event is using. | |
| */ | |
| TP_PROTO(bool preempt, | |
| struct task_struct *prev, | |
| struct task_struct *next, | |
| unsigned int prev_state), | |
| TP_ARGS(preempt, prev, next, prev_state), | |
| /* | |
| * The next fields are where the customization happens. | |
| * The TP_STRUCT__entry() defines what will be recorded | |
| * in the ring buffer when the custom event triggers. | |
| * | |
| * The rest is just like the TRACE_EVENT() macro except that | |
| * it uses the custom entry. | |
| */ | |
| TP_STRUCT__entry( | |
| __field( unsigned short, prev_prio ) | |
| __field( unsigned short, next_prio ) | |
| __field( pid_t, next_pid ) | |
| ), | |
| TP_fast_assign( | |
| __entry->prev_prio = prev->prio; | |
| __entry->next_pid = next->pid; | |
| __entry->next_prio = next->prio; | |
| ), | |
| TP_printk("prev_prio=%d next_pid=%d next_prio=%d", | |
| __entry->prev_prio, __entry->next_pid, __entry->next_prio) | |
| ) | |
| TRACE_CUSTOM_EVENT(sched_waking, | |
| TP_PROTO(struct task_struct *p), | |
| TP_ARGS(p), | |
| TP_STRUCT__entry( | |
| __field( pid_t, pid ) | |
| __field( unsigned short, prio ) | |
| ), | |
| TP_fast_assign( | |
| __entry->pid = p->pid; | |
| __entry->prio = p->prio; | |
| ), | |
| TP_printk("pid=%d prio=%d", __entry->pid, __entry->prio) | |
| ) | |
| #endif | |
| /* | |
| * Just like the headers that create TRACE_EVENTs, the below must | |
| * be outside the protection of the above #if block. | |
| */ | |
| /* | |
| * It is required that the Makefile includes: | |
| * CFLAGS_<c_file>.o := -I$(src) | |
| */ | |
| #undef TRACE_INCLUDE_PATH | |
| #undef TRACE_INCLUDE_FILE | |
| #define TRACE_INCLUDE_PATH . | |
| /* | |
| * It is requred that the TRACE_INCLUDE_FILE be the same | |
| * as this file without the ".h". | |
| */ | |
| #define TRACE_INCLUDE_FILE trace_custom_sched | |
| #include <trace/define_custom_trace.h> |