|
@@ -7621,17 +7621,19 @@ static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter)
|
|
|
if (!test_and_clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state))
|
|
if (!test_and_clear_bit(__IXGBE_RESET_REQUESTED, &adapter->state))
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
|
|
+ rtnl_lock();
|
|
|
/* If we're already down, removing or resetting, just bail */
|
|
/* If we're already down, removing or resetting, just bail */
|
|
|
if (test_bit(__IXGBE_DOWN, &adapter->state) ||
|
|
if (test_bit(__IXGBE_DOWN, &adapter->state) ||
|
|
|
test_bit(__IXGBE_REMOVING, &adapter->state) ||
|
|
test_bit(__IXGBE_REMOVING, &adapter->state) ||
|
|
|
- test_bit(__IXGBE_RESETTING, &adapter->state))
|
|
|
|
|
|
|
+ test_bit(__IXGBE_RESETTING, &adapter->state)) {
|
|
|
|
|
+ rtnl_unlock();
|
|
|
return;
|
|
return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
ixgbe_dump(adapter);
|
|
ixgbe_dump(adapter);
|
|
|
netdev_err(adapter->netdev, "Reset adapter\n");
|
|
netdev_err(adapter->netdev, "Reset adapter\n");
|
|
|
adapter->tx_timeout_count++;
|
|
adapter->tx_timeout_count++;
|
|
|
|
|
|
|
|
- rtnl_lock();
|
|
|
|
|
ixgbe_reinit_locked(adapter);
|
|
ixgbe_reinit_locked(adapter);
|
|
|
rtnl_unlock();
|
|
rtnl_unlock();
|
|
|
}
|
|
}
|