lkml.org 
[lkml]   [2010]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:core/urgent] rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()
    Commit-ID:  8d53dd546f36073e0d29b0cfc24c665db301e3e7
    Gitweb: http://git.kernel.org/tip/8d53dd546f36073e0d29b0cfc24c665db301e3e7
    Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    AuthorDate: Wed, 3 Mar 2010 17:50:18 -0800
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Thu, 4 Mar 2010 12:07:35 +0100

    rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()

    Change the pair of rcu_dereference() calls in
    ftrace_perf_buf_prepare() to rcu_dereference_sched().

    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: laijs@cn.fujitsu.com
    Cc: dipankar@in.ibm.com
    Cc: mathieu.desnoyers@polymtl.ca
    Cc: josh@joshtriplett.org
    Cc: dvhltc@us.ibm.com
    Cc: niv@us.ibm.com
    Cc: peterz@infradead.org
    Cc: Valdis.Kletnieks@vt.edu
    Cc: dhowells@redhat.com
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <1267667418-32233-3-git-send-email-paulmck@linux.vnet.ibm.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    include/trace/ftrace.h | 4 ++--
    kernel/trace/trace_event_profile.c | 4 ++--
    2 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
    index 0804cd5..601ad77 100644
    --- a/include/trace/ftrace.h
    +++ b/include/trace/ftrace.h
    @@ -699,9 +699,9 @@ __attribute__((section("_ftrace_events"))) event_##call = { \
    * __cpu = smp_processor_id();
    *
    * if (in_nmi())
    - * trace_buf = rcu_dereference(perf_trace_buf_nmi);
    + * trace_buf = rcu_dereference_sched(perf_trace_buf_nmi);
    * else
    - * trace_buf = rcu_dereference(perf_trace_buf);
    + * trace_buf = rcu_dereference_sched(perf_trace_buf);
    *
    * if (!trace_buf)
    * goto end;
    diff --git a/kernel/trace/trace_event_profile.c b/kernel/trace/trace_event_profile.c
    index f0d6930..c1cc3ab 100644
    --- a/kernel/trace/trace_event_profile.c
    +++ b/kernel/trace/trace_event_profile.c
    @@ -138,9 +138,9 @@ __kprobes void *ftrace_perf_buf_prepare(int size, unsigned short type,
    cpu = smp_processor_id();

    if (in_nmi())
    - trace_buf = rcu_dereference(perf_trace_buf_nmi);
    + trace_buf = rcu_dereference_sched(perf_trace_buf_nmi);
    else
    - trace_buf = rcu_dereference(perf_trace_buf);
    + trace_buf = rcu_dereference_sched(perf_trace_buf);

    if (!trace_buf)
    goto err;

    \
     
     \ /
      Last update: 2010-03-04 17:35    [W:0.095 / U:0.324 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site