• Jacob Keller's avatar
    iavf: check for removal state before IAVF_FLAG_PF_COMMS_FAILED · 91896c8a
    Jacob Keller authored
    In iavf_adminq_task(), if the function can't acquire the
    adapter->crit_lock, it checks if the driver is removing. If so, it simply
    exits without re-enabling the interrupt. This is done to ensure that the
    task stops processing as soon as possible once the driver is being removed.
    
    However, if the IAVF_FLAG_PF_COMMS_FAILED is set, the function checks this
    before attempting to acquire the lock. In this case, the function exits
    early and re-enables the interrupt. This will happen even if the driver is
    already removing.
    
    Avoid this, by moving the check to after the adapter->crit_lock is
    acquired. This way, if the driver is removing, we will not re-enable the
    interrupt.
    
    Fixes: fc2e6b3b ("iavf: Rework mutexes for better synchronisation")
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarRafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    91896c8a
iavf_main.c 146 KB