lkml.org 
[lkml]   [2009]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 08/16] tracing: have event_trace_printk use static tracer
    From: Steven Rostedt <srostedt@redhat.com>

    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 | 17 +++++++++++++++++
    kernel/trace/trace_events.c | 10 ----------
    2 files changed, 17 insertions(+), 10 deletions(-)

    diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
    index cede1ab..35cfa7b 100644
    --- a/kernel/trace/trace.h
    +++ b/kernel/trace/trace.h
    @@ -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 */
    diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
    index ca624df..238ea95 100644
    --- a/kernel/trace/trace_events.c
    +++ b/kernel/trace/trace_events.c
    @@ -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;
    --
    1.6.1.3
    --


    \
     
     \ /
      Last update: 2009-03-13 03:47    [W:6.769 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site