In this patchset, I introduce a new macro TRACE_EVENT_NONE(), which will define a tracepoint as a do-nothing inline function. #define TRACE_EVENT_NONE(name, proto) \ static inline void trace_##name(proto) \ { } \ static inline bool trace_##name##_enabled(void) \ { \ return false; \ }
Let's take some example for why this macro is needed. - sched The tracepoints trace_sched_stat_{iowait, blocked, wait, sleep} should be not exposed to user if CONFIG_SCHEDSTATS is not set. We can place #ifdef in the kernel/sched/fair.c to fix it, but we don't want to sprinkle #ifdef. So with TRACE_EVENT_NONE(), we can fix it in include/trace/events/sched.h. - rcu When CONFIG_RCU_TRACE is not set, some rcu tracepoints are define as do-nothing macro without validating arguments, that is not proper. We should validate the arguments. Yafang Shao (3): tracing: introduce TRACE_EVENT_NONE() sched/fair: do not expose some tracepoints to user if CONFIG_SCHEDSTATS is not set rcu: validate arguments for rcu tracepoints include/linux/tracepoint.h | 8 +++++ include/trace/define_trace.h | 4 +++ include/trace/events/rcu.h | 84 ++++++++++++++++++++++++++++---------------- include/trace/events/sched.h | 14 ++++++++ kernel/rcu/rcu.h | 9 ++--- kernel/rcu/tree.c | 8 ++--- 6 files changed, 86 insertions(+), 41 deletions(-) -- 1.8.3.1