• David S. Miller's avatar
    forcedeth: Use napi_complete() not __napi_complete(). · 6c2da9c2
    David S. Miller authored
    It's not enough that forcedeth's interrupts are disabled,
    local cpu interrupts have to unconditionally be off
    when we remove the device from the poll list.
    
    Based upon a crash report from
    Alexander Beregalov <a.beregalov@gmail.com>:
    
     WARNING: at lib/list_debug.c:30 __list_add+0x89/0x90()
     Hardware name:
     list_add corruption. prev->next should be next (c06ea834), but was
    f70244c8. (prev=c06ea834).
     Modules linked in: w83627hf hwmon_vid i2c_nforce2
     Pid: 1436, comm: portageq Not tainted 2.6.30-rc1 #1
     Call Trace:
      [<c0129d73>] warn_slowpath+0x73/0xd0
      [<c03c6008>] ? __kfree_skb+0x38/0x90
      [<c03f9b06>] ? tcp_data_snd_check+0x26/0xe0
      [<c03fd67f>] ? tcp_rcv_established+0x2bf/0x5e0
      [<c040557a>] ? tcp_v4_rcv+0x47a/0x610
      [<c014cebd>] ? print_lock_contention_bug+0x1d/0x110
      [<c044a967>] ? _spin_unlock+0x27/0x50
      [<c040564b>] ? tcp_v4_rcv+0x54b/0x610
      [<c02d86f9>] __list_add+0x89/0x90
      [<c03ccff9>] __napi_schedule+0x29/0x60
      [<c036946d>] e1000_intr+0xbd/0x1a0
      [<c015c5de>] handle_IRQ_event+0x3e/0x120
      [<c015e190>] handle_fasteoi_irq+0x60/0xd0
      [<c0104fd4>] handle_irq+0x34/0x60
      [<c015f748>] ? rcu_irq_enter+0x8/0x40
      [<c0104b29>] do_IRQ+0x39/0xa0
      [<c03c592c>] ? skb_release_head_state+0x2c/0x60
      [<c01034ee>] common_interrupt+0x2e/0x34
      [<c02d8601>] ? list_del+0x21/0x90
      [<c014e54b>] ? trace_hardirqs_on+0xb/0x10
      [<c03cd4da>] __napi_complete+0x1a/0x30
      [<c0381971>] nv_napi_poll+0xd1/0x5c0
      [<c014e54b>] ? trace_hardirqs_on+0xb/0x10
      [<c03cd5f6>] net_rx_action+0x106/0x1b0
      [<c012e8df>] __do_softirq+0x6f/0x100
      [<c044a967>] ? _spin_unlock+0x27/0x50
      [<c015e1b8>] ? handle_fasteoi_irq+0x88/0xd0
      [<c012e9cd>] do_softirq+0x5d/0x70
      [<c012ebad>] irq_exit+0x7d/0xa0
      [<c0104b32>] do_IRQ+0x42/0xa0
      [<c012e9b7>] ? do_softirq+0x47/0x70
      [<c01034ee>] common_interrupt+0x2e/0x34
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6c2da9c2
forcedeth.c 192 KB