[2.6.38] tracing: clean ups and fixes
Steven Rostedt
maintainerIngo,
Please pull the latest tip/perf/urgent tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
tip/perf/urgent
Lai Jiangshan (1):
tracing: Remove syscall_exit_fields
Steven Rostedt (1):
tracing: Only process module tracepoints once
----
include/trace/events/module.h | 10 ++++++++++ kernel/trace/trace_syscalls.c | 33 ++++++++++++--------------------- 2 files changed, 22 insertions(+), 21 deletions(-)
Steven Rostedt
maintainerPATCH 1/2 tracing: Only process module tracepoints once
From: Steven Rostedt <[email protected]>
The commit:
9f987b3141f086de27832514aad9f50a53f754
tracing: Include module.h in define_trace.h
only solved half the problem. If the trace/events/module.h header is included at the time of define_trace.h (or in ftrace.h within it), the module.h TRACE_SYSTEM will override the current TRACE_SYSTEM macro.
Since define_trace.h is included when CREATE_TRACE_POINTS is set, and the first thing it does is to #undef CREATE_TRACE_POINTS, by placing the module.h TRACE_SYSTEM inside a
#ifdef CREATE_TRACE_POINTS
we can prevent it from overriding the TRACE_SYSTEM that is being processed, and still process the module.h tracepoints when the module code defines CREATE_TRACE_POINTS and includes the trace/events/module.h header.
As with commit 9f987b3141, this is only an issue if module.h is not included before the trace/events/<event>.h file is included, which (luckily) has not happened yet.
--- include/trace/events/module.h | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
include/trace/events/module.h +10 -0
@@ -1,5 +1,15 @@ +/* +* Because linux/module.h has tracepoints in the header, and ftrace.h +* eventually includes this file, define_trace.h includes linux/module.h +* But we do not want the module.h to override the TRACE_SYSTEM macro +* variable that define_trace.h is processing, so we only set it +* when module events are being processed, which would happen when +* CREATE_TRACE_POINTS is defined. +*/ +#ifdef CREATE_TRACE_POINTS #undef TRACE_SYSTEM#define TRACE_SYSTEM module +#endif #if !defined(_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ )#define _TRACE_MODULE_H
Signature · 1 line
1.7.2.3
Steven Rostedt
maintainerPATCH 2/2 tracing: Remove syscall_exit_fields
In reply to Steven RostedtFrom: Lai Jiangshan <[email protected]>
There is no need for syscall_exit_fields as the syscall exit event class can already host the fields in its structure, like most other trace events do by default. Use that default behavior instead.
Following this scheme, we don't need anymore to override the get_fields() callback of the syscall exit event class either.
Hence both syscall_exit_fields and syscall_get_exit_fields() can be removed.
Also changed some indentation to keep the following under 80 characters:
".fields = LIST_HEAD_INIT(event_class_syscall_exit.fields),"
LKML-Reference: <[email protected]>
--- kernel/trace/trace_syscalls.c | 33 ++++++++++++--------------------- 1 files changed, 12 insertions(+), 21 deletions(-)
kernel/trace/trace_syscalls.c +12 -21
@@ -23,9 +23,6 @@ static int syscall_exit_register(struct ftrace_event_call *event,static int syscall_enter_define_fields (struct ftrace_event_call *call);static int syscall_exit_define_fields (struct ftrace_event_call *call); -/* All syscall exit events have the same fields */ -static LIST_HEAD (syscall_exit_fields); -static struct list_head *syscall_get_enter_fields (struct ftrace_event_call *call) {
@@ -34,34 +31,28 @@ syscall_get_enter_fields(struct ftrace_event_call *call)return &entry->enter_fields; } -static struct list_head * -syscall_get_exit_fields (struct ftrace_event_call *call) -{ -return &syscall_exit_fields; -} -struct trace_event_functions enter_syscall_print_funcs = { - .trace = print_syscall_enter, + .trace = print_syscall_enter, };struct trace_event_functions exit_syscall_print_funcs = { - .trace = print_syscall_exit, + .trace = print_syscall_exit, };struct ftrace_event_class event_class_syscall_enter = { - .system ="syscalls" , - .reg = syscall_enter_register, - .define_fields = syscall_enter_define_fields, - .get_fields = syscall_get_enter_fields, - .raw_init = init_syscall_trace, + .system ="syscalls" , + .reg = syscall_enter_register, + .define_fields = syscall_enter_define_fields, + .get_fields = syscall_get_enter_fields, + .raw_init = init_syscall_trace, };struct ftrace_event_class event_class_syscall_exit = { - .system ="syscalls" , - .reg = syscall_exit_register, - .define_fields = syscall_exit_define_fields, - .get_fields = syscall_get_exit_fields, - .raw_init = init_syscall_trace, + .system ="syscalls" , + .reg = syscall_exit_register, + .define_fields = syscall_exit_define_fields, + .fields =LIST_HEAD_INIT (event_class_syscall_exit.fields), + .raw_init = init_syscall_trace, };extern unsigned long __start_syscalls_metadata[];
Signature · 1 line
1.7.2.3
Quoted 11 lines · Steven Rostedt
Ingo,
Please pull the latest tip/perf/urgent tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
tip/perf/urgentLai Jiangshan (1):
tracing: Removesyscall_exit_fields
Quoted 7 lines
Steven Rostedt (1):
tracing: Only process module tracepoints once----
include/trace/events/module.h | 10 ++++++++++ kernel/trace/trace_syscalls.c | 33 ++++++++++++--------------------- 2 files changed, 22 insertions(+), 21 deletions(-)
Pulled, thanks a lot Steve!
Ingo