Skip to contentSkip to conversation

[2.6.38] tracing: clean ups and fixes

GIT PULL New Steven Rostedt 2 participants 4 messages Jan 15, 2011 Tracing

lore
Share & tools
lore

Steven Rostedt

author maintainer
#0 lore raw

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/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(-)
author maintainer
#1 lore raw

PATCH 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
index c7bb2f0..c6bae36 100644
@@ -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
author maintainer
#2 lore raw

PATCH 2/2 tracing: Remove syscall_exit_fields

In reply to Steven Rostedt

From: 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
index bac752f..b706529 100644
@@ -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
#3 lore raw
In reply to Steven Rostedt
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/urgent

Lai Jiangshan (1):
tracing: Remove syscall_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