• Bruce Allan's avatar
    e1000e: hitting BUG_ON() from napi_enable · 5f4a780d
    Bruce Allan authored
    Based on a patch from Mike McElroy created against the out-of-tree e1000e
    driver:
    
    Hitting the BUG_ON in napi_enable(). Code inspection shows that this can
    only be triggered by calling napi_enable() twice without an intervening
    napi_disable().
    
    I saw the following sequence of events in the stack trace:
    
    1) We simulated a cable pull using an Extreme switch.
    2) e1000_tx_timeout() was entered.
    3) e1000_reset_task() was called. Saw the message from e_err() in the
    console log.
    4) e1000_reinit_locked was called. This function calls e1000_down() and
    e1000_up(). These functions call napi_disable() and napi_enable()
    respectively.
    5) Then on another thread, a monitor task saw carrier was down and executed
    'ip set link down' and 'ip set link up' commands.
    6) Saw the '_E1000_RESETTING'warning fron the e1000_close function.
    7) Either the e1000_open() executed between the e1000_down() and e1000_up()
    calls in step 4 or the e1000_open() call executed after the e1000_up()
    call.  In either case, napi_enable() is called twice which triggers the
    BUG_ON.
    Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
    Cc: Mike McElroy <mike.mcelroy@stratus.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    5f4a780d
netdev.c 180 KB