lkml.org 
[lkml]   [2013]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH V2] smp: Give WARN()ing when calling smp_call_function_many()/single() in serving irq
    On Fri, Jul 05, 2013 at 03:50:57PM +0200, Thomas Gleixner wrote:
    > On Sat, 16 Feb 2013, Chuansheng Liu wrote:
    > > There is a real case for softirq DEADLOCK case:
    > >
    > > CPUA CPUB
    > > spin_lock(&spinlock)
    > > Any irq coming, call the irq handler
    > > irq_exit()
    > > spin_lock_irq(&spinlock)
    > > <== Blocking here due to
    > > CPUB hold it
    > > __do_softirq()
    > > run_timer_softirq()
    > > timer_cb()
    > > call smp_call_function_many()
    > > send IPI interrupt to CPUA
    > > wait_csd()
    > >
    > > Then both CPUA and CPUB will be deadlocked here.
    >

    Why can't we just use spin_lock_irq instead of spin_lock in CPUB to
    prevent this to happen ?

    And the according senario for kernel/smp.c is to use raw_spin_lock_irqsave
    instead of raw_spin_lock in generic_smp_call_function_single_interrupt
    to protect the follow one line codes:

    raw_spin_lock(&q->lock);
    list_replace_init(&q->list, &list);
    raw_spin_unlock(&q->lock);

    Thanks.


    \
     
     \ /
      Last update: 2013-07-07 05:01    [W:4.131 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site