lkml.org 
[lkml]   [2011]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/4] lockdep, timer: Fix del_timer_sync() annotation
    Calling local_bh_enable() will want to actually start processing
    softirqs, which isn't a good idea since this can get called with IRQs
    disabled.

    Cure this by using _local_bh_enable() which doesn't start processing
    softirqs, and use raw_local_irq_save() to avoid any softirqs from
    happending without letting lockdep think IRQs are in fact disabled.

    Reported-by: Nick Bowler <nbowler@elliptictech.com>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <new-submission>
    ---
    kernel/timer.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    Index: linux-2.6/kernel/timer.c
    ===================================================================
    --- linux-2.6.orig/kernel/timer.c
    +++ linux-2.6/kernel/timer.c
    @@ -969,10 +969,14 @@ EXPORT_SYMBOL(try_to_del_timer_sync);
    int del_timer_sync(struct timer_list *timer)
    {
    #ifdef CONFIG_LOCKDEP
    + unsigned long flags;
    +
    + raw_local_irq_save(flags);
    local_bh_disable();
    lock_map_acquire(&timer->lockdep_map);
    lock_map_release(&timer->lockdep_map);
    - local_bh_enable();
    + _local_bh_enable();
    + raw_local_irq_restore(flags);
    #endif
    /*
    * don't use it in hardirq context, because it



    \
     
     \ /
      Last update: 2011-02-03 15:21    [W:0.041 / U:1.028 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site