• Sergei Shtylyov's avatar
    sh_eth: fix napi_{en|dis}able() calls racing against interrupts · d2779e99
    Sergei Shtylyov authored
    While implementing NAPI for the driver, I overlooked the race conditions where
    interrupt  handler might have called napi_schedule_prep() before napi_enable()
    was called or after napi_disable() was called. If RX interrupt happens, this
    would cause the endless interrupts and messages like:
    
    sh-eth eth0: ignoring interrupt, status 0x00040000, mask 0x01ff009f.
    
    The interrupt wouldn't even be masked by the kernel eventually since the handler
    would return IRQ_HANDLED all the time.
    
    As a fix, move napi_enable() call before request_irq() call and napi_disable()
    call after free_irq() call.
    Signed-off-by: default avatarSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d2779e99
sh_eth.c 65.6 KB