Re: [PATCH 08/10 final] tracing: Move print functions into eventclass

From: Frederic Weisbecker
Date: Wed May 12 2010 - 14:37:42 EST


On Wed, May 12, 2010 at 11:28:18AM -0400, Steven Rostedt wrote:
> From: Steven Rostedt <srostedt@xxxxxxxxxx>
>
> Currently, every event has its own trace_event structure. This is
> fine since the structure is needed anyway. But the print function
> structure (trace_event_functions) is now separate. Since the output
> of the trace event is done by the class (with the exception of events
> defined by DEFINE_EVENT_PRINT), it makes sense to have the class
> define the print functions that all events in the class can use.
>
> This makes a bigger deal with the syscall events since all syscall events
> use the same class. The savings here is another 30K.
>
> text data bss dec hex filename
> 4913961 1088356 861512 6863829 68bbd5 vmlinux.orig
> 4900382 1048964 861512 6810858 67ecea vmlinux.init
> 4900446 1049028 861512 6810986 67ed6a vmlinux.preprint
> 4895024 1023812 861512 6780348 6775bc vmlinux.print
>
> To accomplish this, and to let the class know what event is being
> printed, the event structure is embedded in the ftrace_event_call
> structure. This should not be an issues since the event structure
> was created for each event anyway.
>
> Acked-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
> Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
> ---
> include/linux/ftrace_event.h | 2 +-
> include/linux/syscalls.h | 18 +++------------
> include/trace/ftrace.h | 45 +++++++++++++++++-----------------------
> kernel/trace/trace_events.c | 6 ++--
> kernel/trace/trace_kprobe.c | 14 +++++-------
> kernel/trace/trace_syscalls.c | 8 +++++++
> 6 files changed, 41 insertions(+), 52 deletions(-)
>
> diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
> index 4f77932..b1a007d 100644
> --- a/include/linux/ftrace_event.h
> +++ b/include/linux/ftrace_event.h
> @@ -148,7 +148,7 @@ struct ftrace_event_call {
> struct ftrace_event_class *class;
> char *name;
> struct dentry *dir;
> - struct trace_event *event;
> + struct trace_event event;
> int enabled;
> int id;
> const char *print_fmt;
> diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
> index f725677..a1a86a5 100644
> --- a/include/linux/syscalls.h
> +++ b/include/linux/syscalls.h
> @@ -120,24 +120,20 @@ struct perf_event_attr;
>
> extern struct ftrace_event_class event_class_syscall_enter;
> extern struct ftrace_event_class event_class_syscall_exit;
> +extern struct trace_event_functions enter_syscall_print_funcs;
> +extern struct trace_event_functions exit_syscall_print_funcs;
>
> #define SYSCALL_TRACE_ENTER_EVENT(sname) \
> static struct syscall_metadata __syscall_meta_##sname; \
> static struct ftrace_event_call \
> __attribute__((__aligned__(4))) event_enter_##sname; \
> - static struct trace_event_functions enter_syscall_print_funcs_##sname = { \
> - .trace = print_syscall_enter, \
> - }; \
> - static struct trace_event enter_syscall_print_##sname = { \
> - .funcs = &enter_syscall_print_funcs_##sname, \
> - }; \
> static struct ftrace_event_call __used \
> __attribute__((__aligned__(4))) \
> __attribute__((section("_ftrace_events"))) \
> event_enter_##sname = { \
> .name = "sys_enter"#sname, \
> .class = &event_class_syscall_enter, \
> - .event = &enter_syscall_print_##sname, \
> + .event.funcs = &enter_syscall_print_funcs, \



Ah ok, looks like I don't need to write this patch in fact :)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/