0001 #ifdef CONFIG_PREEMPTIRQ_TRACEPOINTS
0002
0003 #undef TRACE_SYSTEM
0004 #define TRACE_SYSTEM preemptirq
0005
0006 #if !defined(_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ)
0007 #define _TRACE_PREEMPTIRQ_H
0008
0009 #include <linux/ktime.h>
0010 #include <linux/tracepoint.h>
0011 #include <linux/string.h>
0012 #include <asm/sections.h>
0013
0014 DECLARE_EVENT_CLASS(preemptirq_template,
0015
0016 TP_PROTO(unsigned long ip, unsigned long parent_ip),
0017
0018 TP_ARGS(ip, parent_ip),
0019
0020 TP_STRUCT__entry(
0021 __field(s32, caller_offs)
0022 __field(s32, parent_offs)
0023 ),
0024
0025 TP_fast_assign(
0026 __entry->caller_offs = (s32)(ip - (unsigned long)_stext);
0027 __entry->parent_offs = (s32)(parent_ip - (unsigned long)_stext);
0028 ),
0029
0030 TP_printk("caller=%pS parent=%pS",
0031 (void *)((unsigned long)(_stext) + __entry->caller_offs),
0032 (void *)((unsigned long)(_stext) + __entry->parent_offs))
0033 );
0034
0035 #ifdef CONFIG_TRACE_IRQFLAGS
0036 DEFINE_EVENT(preemptirq_template, irq_disable,
0037 TP_PROTO(unsigned long ip, unsigned long parent_ip),
0038 TP_ARGS(ip, parent_ip));
0039
0040 DEFINE_EVENT(preemptirq_template, irq_enable,
0041 TP_PROTO(unsigned long ip, unsigned long parent_ip),
0042 TP_ARGS(ip, parent_ip));
0043 #else
0044 #define trace_irq_enable(...)
0045 #define trace_irq_disable(...)
0046 #define trace_irq_enable_rcuidle(...)
0047 #define trace_irq_disable_rcuidle(...)
0048 #endif
0049
0050 #ifdef CONFIG_TRACE_PREEMPT_TOGGLE
0051 DEFINE_EVENT(preemptirq_template, preempt_disable,
0052 TP_PROTO(unsigned long ip, unsigned long parent_ip),
0053 TP_ARGS(ip, parent_ip));
0054
0055 DEFINE_EVENT(preemptirq_template, preempt_enable,
0056 TP_PROTO(unsigned long ip, unsigned long parent_ip),
0057 TP_ARGS(ip, parent_ip));
0058 #else
0059 #define trace_preempt_enable(...)
0060 #define trace_preempt_disable(...)
0061 #define trace_preempt_enable_rcuidle(...)
0062 #define trace_preempt_disable_rcuidle(...)
0063 #endif
0064
0065 #endif
0066
0067 #include <trace/define_trace.h>
0068
0069 #else
0070 #define trace_irq_enable(...)
0071 #define trace_irq_disable(...)
0072 #define trace_irq_enable_rcuidle(...)
0073 #define trace_irq_disable_rcuidle(...)
0074 #define trace_preempt_enable(...)
0075 #define trace_preempt_disable(...)
0076 #define trace_preempt_enable_rcuidle(...)
0077 #define trace_preempt_disable_rcuidle(...)
0078 #endif