1. 28 Mar, 2008 1 commit
    • David S. Miller's avatar
      [NET]: Use local_irq_{save,restore}() in napi_complete(). · 50fd4407
      David S. Miller authored
      Based upon a lockdep report.
      
      Since ->poll() can be invoked from netpoll with interrupts
      disabled, we must not unconditionally enable interrupts
      in napi_complete().
      
      Instead we must use local_irq_{save,restore}().
      
      Noticed by Peter Zijlstra:
      
      <irqs disabled>
      
        netpoll_poll()
          poll_napi()
            spin_trylock(&napi->poll_lock)
            poll_one_napi()
              napi->poll() := sky2_poll()
                napi_complete()
                  local_irq_disable()
                  local_irq_enable() <--- *BUG*
      
        <irq>
          irq_exit()
            do_softirq()
              net_rx_action()
                spin_lock(&napi->poll_lock) <--- Deadlock!
      
      Because we still hold the lock....
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      50fd4407
  2. 27 Mar, 2008 2 commits
  3. 26 Mar, 2008 33 commits
  4. 24 Mar, 2008 4 commits