net/mlx5: Stop waiting for PCI up if teardown was triggered
authorMoshe Shemesh <moshe@mellanox.com>
Tue, 14 Mar 2023 05:42:21 +0000 (22:42 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 16 Mar 2023 05:09:13 +0000 (22:09 -0700)
If driver teardown is called while PCI is turned off, there is a race
between health recovery and teardown. If health recovery already started
it will wait 60 sec trying to see if PCI gets back and it can recover,
but actually there is no need to wait anymore once teardown was called.

Use the MLX5_BREAK_FW_WAIT flag which is set on driver teardown to break
waiting for PCI up.

Signed-off-by: Moshe Shemesh <moshe@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Link: https://lore.kernel.org/r/20230314054234.267365-3-saeed@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/health.c

index f9438d4e43caf095ae363e56bf11416e51a24b9f..016c5f99c4706d9a54fd2656c94c61963c7fdb73 100644 (file)
@@ -325,6 +325,10 @@ int mlx5_health_wait_pci_up(struct mlx5_core_dev *dev)
        while (sensor_pci_not_working(dev)) {
                if (time_after(jiffies, end))
                        return -ETIMEDOUT;
+               if (test_bit(MLX5_BREAK_FW_WAIT, &dev->intf_state)) {
+                       mlx5_core_warn(dev, "device is being removed, stop waiting for PCI\n");
+                       return -ENODEV;
+               }
                msleep(100);
        }
        return 0;