Messages in this thread Patch in this message | | | Subject | [PATCH][GIT PULL][v3.7] trace: Don't declare trace_*_rcuidle functions in modules | From | Steven Rostedt <> | Date | Wed, 12 Sep 2012 14:46:56 -0400 |
| |
Ingo,
Josh made a change to the tracing code that affects both the work Paul McKenney and I are currently doing. At the last Kernel Summit back in August, Linus said when such a case exists, it is best to make a separate branch based off of his tree and place the change there. This way, the repositories that need to share the change can both pull them in and the SHA1 will match for both. Whichever branch is pulled in first by Linus will also pull in the necessary change for the other branch as well.
I made a separate branch from Linus's v3.6-rc5 (called tip/perf/rcu) and applied Josh's change to it. Could you please pull this into perf/core and whatever branch that Paul needs it in. Or just have Paul pull this change as well.
Feel free to add the above text when merging the changes.
Thanks,
-- Steve
Please pull the latest tip/perf/rcu tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git tip/perf/rcu
Head SHA1: 7ece55a4a3a04abe37118b1d4fb0b702eeb1de4c
Josh Triplett (1): trace: Don't declare trace_*_rcuidle functions in modules
---- include/linux/tracepoint.h | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) --------------------------- commit 7ece55a4a3a04abe37118b1d4fb0b702eeb1de4c Author: Josh Triplett <josh@joshtriplett.org> Date: Tue Sep 4 23:23:06 2012 -0700
trace: Don't declare trace_*_rcuidle functions in modules Tracepoints declare a static inline trace_*_rcuidle variant of the trace function, to support safely generating trace events from the idle loop. Module code never actually uses that variant of trace functions, because modules don't run code that needs tracing with RCU idled. However, the declaration of those otherwise unused functions causes the module to reference rcu_idle_exit and rcu_idle_enter, which RCU does not export to modules. To avoid this, don't generate trace_*_rcuidle functions for tracepoints declared in module code. Link: http://lkml.kernel.org/r/20120905062306.GA14756@leaf Reported-by: Steven Rostedt <rostedt@goodmis.org> Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index 802de56..2f322c3 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h @@ -136,6 +136,22 @@ static inline void tracepoint_synchronize_unregister(void) postrcu; \ } while (0) +#ifndef MODULE +#define __DECLARE_TRACE_RCU(name, proto, args, cond, data_proto, data_args) \ + static inline void trace_##name##_rcuidle(proto) \ + { \ + if (static_key_false(&__tracepoint_##name.key)) \ + __DO_TRACE(&__tracepoint_##name, \ + TP_PROTO(data_proto), \ + TP_ARGS(data_args), \ + TP_CONDITION(cond), \ + rcu_idle_exit(), \ + rcu_idle_enter()); \ + } +#else +#define __DECLARE_TRACE_RCU(name, proto, args, cond, data_proto, data_args) +#endif + /* * Make sure the alignment of the structure in the __tracepoints section will * not add unwanted padding between the beginning of the section and the @@ -151,16 +167,8 @@ static inline void tracepoint_synchronize_unregister(void) TP_ARGS(data_args), \ TP_CONDITION(cond),,); \ } \ - static inline void trace_##name##_rcuidle(proto) \ - { \ - if (static_key_false(&__tracepoint_##name.key)) \ - __DO_TRACE(&__tracepoint_##name, \ - TP_PROTO(data_proto), \ - TP_ARGS(data_args), \ - TP_CONDITION(cond), \ - rcu_idle_exit(), \ - rcu_idle_enter()); \ - } \ + __DECLARE_TRACE_RCU(name, PARAMS(proto), PARAMS(args), \ + PARAMS(cond), PARAMS(data_proto), PARAMS(data_args)) \ static inline int \ register_trace_##name(void (*probe)(data_proto), void *data) \ { \ [unhandled content-type:application/pgp-signature]
| |