]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
tracing: have event_trace_printk use static tracer
authorSteven Rostedt <srostedt@redhat.com>
Thu, 12 Mar 2009 18:19:25 +0000 (14:19 -0400)
committerSteven Rostedt <srostedt@redhat.com>
Fri, 13 Mar 2009 01:15:00 +0000 (21:15 -0400)
Impact: speed up on event tracing

The event_trace_printk is currently a wrapper function that calls
trace_vprintk. Because it uses a variable for the fmt it misses out
on the optimization of using the binary printk.

This patch makes event_trace_printk into a macro wrapper to use the
fmt as the same as the trace_printks.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
kernel/trace/trace.h
kernel/trace/trace_events.c

index cede1ab49d072c27e1508f346021d829461fe9fc..35cfa7bbaf38435da4de9e4c9382fd3237c04a94 100644 (file)
@@ -773,4 +773,21 @@ void event_trace_printk(unsigned long ip, const char *fmt, ...);
 extern struct ftrace_event_call __start_ftrace_events[];
 extern struct ftrace_event_call __stop_ftrace_events[];
 
+extern const char *__start___trace_bprintk_fmt[];
+extern const char *__stop___trace_bprintk_fmt[];
+
+#define event_trace_printk(ip, fmt, args...)                           \
+do {                                                                   \
+       __trace_printk_check_format(fmt, ##args);                       \
+       tracing_record_cmdline(current);                                \
+       if (__builtin_constant_p(fmt)) {                                \
+               static const char *trace_printk_fmt                     \
+                 __attribute__((section("__trace_printk_fmt"))) =      \
+                       __builtin_constant_p(fmt) ? fmt : NULL;         \
+                                                                       \
+               __trace_bprintk(ip, trace_printk_fmt, ##args);          \
+       } else                                                          \
+               __trace_printk(ip, fmt, ##args);                        \
+} while (0)
+
 #endif /* _LINUX_KERNEL_TRACE_H */
index ca624df735916d3264d6d2a7f3f273f8972d265c..238ea95a41159ddee14b8fa0fb3ae1f765147925 100644 (file)
@@ -24,16 +24,6 @@ static DEFINE_MUTEX(event_mutex);
             (unsigned long)event < (unsigned long)__stop_ftrace_events; \
             event++)
 
-void event_trace_printk(unsigned long ip, const char *fmt, ...)
-{
-       va_list ap;
-
-       va_start(ap, fmt);
-       tracing_record_cmdline(current);
-       trace_vprintk(ip, task_curr_ret_stack(current), fmt, ap);
-       va_end(ap);
-}
-
 static void ftrace_clear_events(void)
 {
        struct ftrace_event_call *call = (void *)__start_ftrace_events;