net/mlx5: Cancel recovery work in remove flow
If there is pending delayed work for health recovery it must be canceled if the device is being unloaded. Fixes: 05ac2c0b7438 ("net/mlx5: Fix race between PCI error handlers and health work") Signed-off-by: Daniel Jurgens <danielj@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
883371c453
commit
689a248df8
@ -1196,6 +1196,8 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
|
|||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
mlx5_drain_health_wq(dev);
|
||||||
|
|
||||||
mutex_lock(&dev->intf_state_mutex);
|
mutex_lock(&dev->intf_state_mutex);
|
||||||
if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
|
if (test_bit(MLX5_INTERFACE_STATE_DOWN, &dev->intf_state)) {
|
||||||
dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
|
dev_warn(&dev->pdev->dev, "%s: interface is down, NOP\n",
|
||||||
@ -1358,10 +1360,9 @@ static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,
|
|||||||
|
|
||||||
mlx5_enter_error_state(dev);
|
mlx5_enter_error_state(dev);
|
||||||
mlx5_unload_one(dev, priv, false);
|
mlx5_unload_one(dev, priv, false);
|
||||||
/* In case of kernel call save the pci state and drain health wq */
|
/* In case of kernel call save the pci state */
|
||||||
if (state) {
|
if (state) {
|
||||||
pci_save_state(pdev);
|
pci_save_state(pdev);
|
||||||
mlx5_drain_health_wq(dev);
|
|
||||||
mlx5_pci_disable_device(dev);
|
mlx5_pci_disable_device(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user