| /* 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> |