lkml.org 
[lkml]   [2013]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[for-next][PATCH 09/18] ftrace: Add rcu_unsafe_filter_functions file
    From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>

    Since the RCU unsafe functions are no longer displayed by the
    available_filter_functions, we still need a way to see these
    functions in order to trace them. Create a new file that lists
    the functions that were declared RCU unsafe.

    Cc: Jiri Olsa <jolsa@redhat.com>
    Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    include/linux/ftrace.h | 1 +
    kernel/trace/ftrace.c | 31 +++++++++++++++++++++++++++++++
    2 files changed, 32 insertions(+)

    diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
    index 4709264..4752764 100644
    --- a/include/linux/ftrace.h
    +++ b/include/linux/ftrace.h
    @@ -412,6 +412,7 @@ enum {
    FTRACE_ITER_HASH = (1 << 4),
    FTRACE_ITER_ENABLED = (1 << 5),
    FTRACE_ITER_NO_UNSAFE = (1 << 6),
    + FTRACE_ITER_UNSAFE_ONLY = (1 << 7),
    };

    void arch_ftrace_update_code(int command);
    diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
    index df46e93..d78f2cb 100644
    --- a/kernel/trace/ftrace.c
    +++ b/kernel/trace/ftrace.c
    @@ -2662,6 +2662,9 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
    ((iter->flags & FTRACE_ITER_ENABLED) &&
    !(rec->flags & FTRACE_FL_ENABLED)) ||

    + ((iter->flags & FTRACE_ITER_UNSAFE_ONLY) &&
    + !ftrace_lookup_ip(ftrace_unsafe_rcu, rec->ip)) ||
    +
    ((iter->flags & FTRACE_ITER_NO_UNSAFE) &&
    ftrace_lookup_ip(ftrace_unsafe_rcu, rec->ip))) {

    @@ -2799,6 +2802,24 @@ ftrace_avail_open(struct inode *inode, struct file *file)
    }

    static int
    +ftrace_rcu_unsafe_open(struct inode *inode, struct file *file)
    +{
    + struct ftrace_iterator *iter;
    +
    + if (unlikely(ftrace_disabled))
    + return -ENODEV;
    +
    + iter = __seq_open_private(file, &show_ftrace_seq_ops, sizeof(*iter));
    + if (iter) {
    + iter->pg = ftrace_pages_start;
    + iter->flags = FTRACE_ITER_UNSAFE_ONLY;
    + iter->ops = &global_ops;
    + }
    +
    + return iter ? 0 : -ENOMEM;
    +}
    +
    +static int
    ftrace_enabled_open(struct inode *inode, struct file *file)
    {
    struct ftrace_iterator *iter;
    @@ -3850,6 +3871,13 @@ static const struct file_operations ftrace_avail_fops = {
    .release = seq_release_private,
    };

    +static const struct file_operations ftrace_rcu_unsafe_fops = {
    + .open = ftrace_rcu_unsafe_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release_private,
    +};
    +
    static const struct file_operations ftrace_enabled_fops = {
    .open = ftrace_enabled_open,
    .read = seq_read,
    @@ -4086,6 +4114,9 @@ static __init int ftrace_init_dyn_debugfs(struct dentry *d_tracer)
    trace_create_file("available_filter_functions", 0444,
    d_tracer, NULL, &ftrace_avail_fops);

    + trace_create_file("rcu_unsafe_filter_functions", 0444,
    + d_tracer, NULL, &ftrace_rcu_unsafe_fops);
    +
    trace_create_file("enabled_functions", 0444,
    d_tracer, NULL, &ftrace_enabled_fops);

    --
    1.7.10.4



    \
     
     \ /
      Last update: 2013-09-04 22:41    [W:2.210 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site