diff options
| author | Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | 2014-04-08 17:26:21 -0400 | 
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2014-04-08 20:43:28 -0400 | 
| commit | de7b2973903c6cc50b31ee5682a69b2219b9919d (patch) | |
| tree | a5b9d78102854b0073f5893cafb29920f8fb55e1 /include/trace | |
| parent | 68114e5eb862ad0a7a261b91497281b026102715 (diff) | |
| download | linux-de7b2973903c6cc50b31ee5682a69b2219b9919d.tar.bz2 | |
tracepoint: Use struct pointer instead of name hash for reg/unreg tracepoints
Register/unregister tracepoint probes with struct tracepoint pointer
rather than tracepoint name.
This change, which vastly simplifies tracepoint.c, has been proposed by
Steven Rostedt. It also removes 8.8kB (mostly of text) to the vmlinux
size.
From this point on, the tracers need to pass a struct tracepoint pointer
to probe register/unregister. A probe can now only be connected to a
tracepoint that exists. Moreover, tracers are responsible for
unregistering the probe before the module containing its associated
tracepoint is unloaded.
   text    data     bss     dec     hex filename
10443444        4282528 10391552        25117524        17f4354 vmlinux.orig
10434930        4282848 10391552        25109330        17f2352 vmlinux
Link: http://lkml.kernel.org/r/1396992381-23785-2-git-send-email-mathieu.desnoyers@efficios.com
CC: Ingo Molnar <mingo@kernel.org>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Frank Ch. Eigler <fche@redhat.com>
CC: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
[ SDR - fixed return val in void func in tracepoint_module_going() ]
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/ftrace.h | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 8765126b328c..9c44c11cd9bb 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h @@ -470,10 +470,11 @@ static inline notrace int ftrace_get_offsets_##call(			\   * };   *   * static struct ftrace_event_call event_<call> = { - *	.name			= "<call>", + *	.tp			= &__tracepoint_<call>,   *	.class			= event_class_<template>,   *	.event			= &ftrace_event_type_<call>,   *	.print_fmt		= print_fmt_<call>, + *	.flags			= TRACE_EVENT_FL_TRACEPOINT,   * };   * // its only safe to use pointers when doing linker tricks to   * // create an array. @@ -605,10 +606,11 @@ static struct ftrace_event_class __used __refdata event_class_##call = { \  #define DEFINE_EVENT(template, call, proto, args)			\  									\  static struct ftrace_event_call __used event_##call = {			\ -	.name			= #call,				\ +	.tp			= &__tracepoint_##call,			\  	.class			= &event_class_##template,		\  	.event.funcs		= &ftrace_event_type_funcs_##template,	\  	.print_fmt		= print_fmt_##template,			\ +	.flags			= TRACE_EVENT_FL_TRACEPOINT,		\  };									\  static struct ftrace_event_call __used					\  __attribute__((section("_ftrace_events"))) *__event_##call = &event_##call @@ -619,10 +621,11 @@ __attribute__((section("_ftrace_events"))) *__event_##call = &event_##call  static const char print_fmt_##call[] = print;				\  									\  static struct ftrace_event_call __used event_##call = {			\ -	.name			= #call,				\ +	.tp			= &__tracepoint_##call,			\  	.class			= &event_class_##template,		\  	.event.funcs		= &ftrace_event_type_funcs_##call,	\  	.print_fmt		= print_fmt_##call,			\ +	.flags			= TRACE_EVENT_FL_TRACEPOINT,		\  };									\  static struct ftrace_event_call __used					\  __attribute__((section("_ftrace_events"))) *__event_##call = &event_##call |