lkml.org 
[lkml]   [2009]   [Nov]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] notifier atomic call chain notrace
    * Jason Baron (jbaron@redhat.com) wrote:
    > Note that this is conditional on gcc >= 4.5. Also there is a !lockdep
    > condition. This is b/c the die_notifier takes an rcu_read_lock() on the
    > int3 trap, which then causes another one etc. Since, we aren't going to be
    > installing removing the handler, the rcu_read_lock() could be avoided for this
    > case with some code restructuring.
    >
    [snip]

    Would the following patch help ? I use it in the LTTng tree to alleviate
    this problem.


    notifier atomic call chain notrace

    In LTTng, being able to use the atomic notifier from cpu idle entry to
    ensure the tracer flush the last events in the current subbuffer
    requires the rcu read-side to be marked "notrace", otherwise it can end
    up calling back into lockdep and the tracer.

    Also apply to the the die notifier.

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    CC: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    CC: Jason Baron <jbaron@redhat.com>
    CC: mingo@elte.hu
    ---
    kernel/notifier.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    Index: linux-2.6-lttng/kernel/notifier.c
    ===================================================================
    --- linux-2.6-lttng.orig/kernel/notifier.c 2009-11-12 17:58:56.000000000 -0500
    +++ linux-2.6-lttng/kernel/notifier.c 2009-11-12 18:03:28.000000000 -0500
    @@ -148,7 +148,7 @@ int atomic_notifier_chain_unregister(str
    spin_lock_irqsave(&nh->lock, flags);
    ret = notifier_chain_unregister(&nh->head, n);
    spin_unlock_irqrestore(&nh->lock, flags);
    - synchronize_rcu();
    + synchronize_sched();
    return ret;
    }
    EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister);
    @@ -178,9 +178,9 @@ int __kprobes __atomic_notifier_call_cha
    {
    int ret;

    - rcu_read_lock();
    + rcu_read_lock_sched_notrace();
    ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
    - rcu_read_unlock();
    + rcu_read_unlock_sched_notrace();
    return ret;
    }
    EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain);
    --
    Mathieu Desnoyers
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


    \
     
     \ /
      Last update: 2009-11-19 00:41    [W:0.024 / U:0.804 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site