lkml.org 
[lkml]   [2011]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/urgent] trace_events_filter: Use rcu_assign_pointer() when setting ftrace_event_call->filter
    Commit-ID:  d3d9acf646679c1981032b0985b386d12fccc60c
    Gitweb: http://git.kernel.org/tip/d3d9acf646679c1981032b0985b386d12fccc60c
    Author: Tejun Heo <tj@kernel.org>
    AuthorDate: Wed, 23 Nov 2011 08:49:49 -0800
    Committer: Steven Rostedt <rostedt@goodmis.org>
    CommitDate: Thu, 1 Dec 2011 22:16:47 -0500

    trace_events_filter: Use rcu_assign_pointer() when setting ftrace_event_call->filter

    ftrace_event_call->filter is sched RCU protected but didn't use
    rcu_assign_pointer(). Use it.

    TODO: Add proper __rcu annotation to call->filter and all its users.

    -v2: Use RCU_INIT_POINTER() for %NULL clearing as suggested by Eric.

    Link: http://lkml.kernel.org/r/20111123164949.GA29639@google.com

    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@kernel.org # (2.6.39+)
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/trace/trace_events_filter.c | 6 +++---
    1 files changed, 3 insertions(+), 3 deletions(-)

    diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
    index 816d3d0..d6e7926 100644
    --- a/kernel/trace/trace_events_filter.c
    +++ b/kernel/trace/trace_events_filter.c
    @@ -1686,7 +1686,7 @@ static int replace_system_preds(struct event_subsystem *system,
    * replace the filter for the call.
    */
    filter = call->filter;
    - call->filter = filter_item->filter;
    + rcu_assign_pointer(call->filter, filter_item->filter);
    filter_item->filter = filter;

    fail = false;
    @@ -1741,7 +1741,7 @@ int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
    filter = call->filter;
    if (!filter)
    goto out_unlock;
    - call->filter = NULL;
    + RCU_INIT_POINTER(call->filter, NULL);
    /* Make sure the filter is not being used */
    synchronize_sched();
    __free_filter(filter);
    @@ -1782,7 +1782,7 @@ out:
    * string
    */
    tmp = call->filter;
    - call->filter = filter;
    + rcu_assign_pointer(call->filter, filter);
    if (tmp) {
    /* Make sure the call is done with the filter */
    synchronize_sched();

    \
     
     \ /
      Last update: 2011-12-05 18:37    [W:0.027 / U:1.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site