• Michael Chan's avatar
    bnxt_en: Fix bnxt_reset() in the slow path task. · a551ee94
    Michael Chan authored
    In bnxt_sp_task(), we set a bit BNXT_STATE_IN_SP_TASK so that bnxt_close()
    will synchronize and wait for bnxt_sp_task() to finish.  Some functions
    in bnxt_sp_task() require us to clear BNXT_STATE_IN_SP_TASK and then
    acquire rtnl_lock() to prevent race conditions.
    
    There are some bugs related to this logic. This patch refactors the code
    to have common bnxt_rtnl_lock_sp() and bnxt_rtnl_unlock_sp() to handle
    the RTNL and the clearing/setting of the bit.  Multiple functions will
    need the same logic.  We also need to move bnxt_reset() to the end of
    bnxt_sp_task().  Functions that clear BNXT_STATE_IN_SP_TASK must be the
    last functions to be called in bnxt_sp_task().  The common scheme will
    handle the condition properly.
    Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a551ee94
bnxt.c 184 KB