lkml.org 
[lkml]   [2010]   [Oct]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/9] tracing: Make graph related irqs/preemptsoff functions global
    From: Jiri Olsa <jolsa@redhat.com>

    Move trace_graph_function() and print_graph_headers_flags() functions
    to the trace_function_graph.c to be globaly available.

    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    LKML-Reference: <1285243253-7372-3-git-send-email-jolsa@redhat.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/trace/trace.h | 4 ++
    kernel/trace/trace_functions_graph.c | 63 ++++++++++++++++++++++++++++++++--
    kernel/trace/trace_irqsoff.c | 56 ++++--------------------------
    3 files changed, 71 insertions(+), 52 deletions(-)

    diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
    index d39b3c5..9021f8c 100644
    --- a/kernel/trace/trace.h
    +++ b/kernel/trace/trace.h
    @@ -343,6 +343,10 @@ void trace_function(struct trace_array *tr,
    unsigned long ip,
    unsigned long parent_ip,
    unsigned long flags, int pc);
    +void trace_graph_function(struct trace_array *tr,
    + unsigned long ip,
    + unsigned long parent_ip,
    + unsigned long flags, int pc);
    void trace_default_header(struct seq_file *m);
    void print_trace_header(struct seq_file *m, struct trace_iterator *iter);
    int trace_empty(struct trace_iterator *iter);
    diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
    index 47a8b8b..af03ba9 100644
    --- a/kernel/trace/trace_functions_graph.c
    +++ b/kernel/trace/trace_functions_graph.c
    @@ -262,6 +262,35 @@ int trace_graph_thresh_entry(struct ftrace_graph_ent *trace)
    return trace_graph_entry(trace);
    }

    +static void
    +__trace_graph_function(struct trace_array *tr,
    + unsigned long ip, unsigned long flags, int pc)
    +{
    + u64 time = trace_clock_local();
    + struct ftrace_graph_ent ent = {
    + .func = ip,
    + .depth = 0,
    + };
    + struct ftrace_graph_ret ret = {
    + .func = ip,
    + .depth = 0,
    + .calltime = time,
    + .rettime = time,
    + };
    +
    + __trace_graph_entry(tr, &ent, flags, pc);
    + __trace_graph_return(tr, &ret, flags, pc);
    +}
    +
    +void
    +trace_graph_function(struct trace_array *tr,
    + unsigned long ip, unsigned long parent_ip,
    + unsigned long flags, int pc)
    +{
    + __trace_graph_function(tr, parent_ip, flags, pc);
    + __trace_graph_function(tr, ip, flags, pc);
    +}
    +
    void __trace_graph_return(struct trace_array *tr,
    struct ftrace_graph_ret *trace,
    unsigned long flags,
    @@ -1178,7 +1207,7 @@ print_graph_comment(struct trace_seq *s, struct trace_entry *ent,


    enum print_line_t
    -print_graph_function_flags(struct trace_iterator *iter, u32 flags)
    +__print_graph_function_flags(struct trace_iterator *iter, u32 flags)
    {
    struct ftrace_graph_ent_entry *field;
    struct fgraph_data *data = iter->private;
    @@ -1241,7 +1270,18 @@ print_graph_function_flags(struct trace_iterator *iter, u32 flags)
    static enum print_line_t
    print_graph_function(struct trace_iterator *iter)
    {
    - return print_graph_function_flags(iter, tracer_flags.val);
    + return __print_graph_function_flags(iter, tracer_flags.val);
    +}
    +
    +enum print_line_t print_graph_function_flags(struct trace_iterator *iter,
    + u32 flags)
    +{
    + if (trace_flags & TRACE_ITER_LATENCY_FMT)
    + flags |= TRACE_GRAPH_PRINT_DURATION;
    + else
    + flags |= TRACE_GRAPH_PRINT_ABS_TIME;
    +
    + return __print_graph_function_flags(iter, flags);
    }

    static enum print_line_t
    @@ -1273,7 +1313,7 @@ static void print_lat_header(struct seq_file *s, u32 flags)
    seq_printf(s, "#%.*s|||| / \n", size, spaces);
    }

    -void print_graph_headers_flags(struct seq_file *s, u32 flags)
    +static void __print_graph_headers_flags(struct seq_file *s, u32 flags)
    {
    int lat = trace_flags & TRACE_ITER_LATENCY_FMT;

    @@ -1314,6 +1354,23 @@ void print_graph_headers(struct seq_file *s)
    print_graph_headers_flags(s, tracer_flags.val);
    }

    +void print_graph_headers_flags(struct seq_file *s, u32 flags)
    +{
    + struct trace_iterator *iter = s->private;
    +
    + if (trace_flags & TRACE_ITER_LATENCY_FMT) {
    + /* print nothing if the buffers are empty */
    + if (trace_empty(iter))
    + return;
    +
    + print_trace_header(s, iter);
    + flags |= TRACE_GRAPH_PRINT_DURATION;
    + } else
    + flags |= TRACE_GRAPH_PRINT_ABS_TIME;
    +
    + __print_graph_headers_flags(s, flags);
    +}
    +
    void graph_trace_open(struct trace_iterator *iter)
    {
    /* pid and depth on the last trace processed */
    diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c
    index 73a6b06..4047e98 100644
    --- a/kernel/trace/trace_irqsoff.c
    +++ b/kernel/trace/trace_irqsoff.c
    @@ -229,75 +229,33 @@ static void irqsoff_trace_close(struct trace_iterator *iter)

    static enum print_line_t irqsoff_print_line(struct trace_iterator *iter)
    {
    - u32 flags = GRAPH_TRACER_FLAGS;
    -
    - if (trace_flags & TRACE_ITER_LATENCY_FMT)
    - flags |= TRACE_GRAPH_PRINT_DURATION;
    - else
    - flags |= TRACE_GRAPH_PRINT_ABS_TIME;
    -
    /*
    * In graph mode call the graph tracer output function,
    * otherwise go with the TRACE_FN event handler
    */
    if (is_graph())
    - return print_graph_function_flags(iter, flags);
    + return print_graph_function_flags(iter, GRAPH_TRACER_FLAGS);

    return TRACE_TYPE_UNHANDLED;
    }

    static void irqsoff_print_header(struct seq_file *s)
    {
    - if (is_graph()) {
    - struct trace_iterator *iter = s->private;
    - u32 flags = GRAPH_TRACER_FLAGS;
    -
    - if (trace_flags & TRACE_ITER_LATENCY_FMT) {
    - /* print nothing if the buffers are empty */
    - if (trace_empty(iter))
    - return;
    -
    - print_trace_header(s, iter);
    - flags |= TRACE_GRAPH_PRINT_DURATION;
    - } else
    - flags |= TRACE_GRAPH_PRINT_ABS_TIME;
    -
    - print_graph_headers_flags(s, flags);
    - } else
    + if (is_graph())
    + print_graph_headers_flags(s, GRAPH_TRACER_FLAGS);
    + else
    trace_default_header(s);
    }

    static void
    -trace_graph_function(struct trace_array *tr,
    - unsigned long ip, unsigned long flags, int pc)
    -{
    - u64 time = trace_clock_local();
    - struct ftrace_graph_ent ent = {
    - .func = ip,
    - .depth = 0,
    - };
    - struct ftrace_graph_ret ret = {
    - .func = ip,
    - .depth = 0,
    - .calltime = time,
    - .rettime = time,
    - };
    -
    - __trace_graph_entry(tr, &ent, flags, pc);
    - __trace_graph_return(tr, &ret, flags, pc);
    -}
    -
    -static void
    __trace_function(struct trace_array *tr,
    unsigned long ip, unsigned long parent_ip,
    unsigned long flags, int pc)
    {
    - if (!is_graph())
    + if (is_graph())
    + trace_graph_function(tr, ip, parent_ip, flags, pc);
    + else
    trace_function(tr, ip, parent_ip, flags, pc);
    - else {
    - trace_graph_function(tr, parent_ip, flags, pc);
    - trace_graph_function(tr, ip, flags, pc);
    - }
    }

    #else
    --
    1.7.1



    \
     
     \ /
      Last update: 2010-10-06 05:39    [W:0.028 / U:63.156 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site