net/mlx5: Skip HotPlug check on sync reset using hot reset
authorMoshe Shemesh <moshe@nvidia.com>
Wed, 11 Sep 2024 20:17:53 +0000 (13:17 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 13 Sep 2024 03:50:29 +0000 (20:50 -0700)
Sync reset request is nacked by the driver when PCIe bridge connected to
mlx5 device has HotPlug interrupt enabled. However, when using reset
method of hot reset this check can be skipped as Hotplug is supported on
this reset method.

Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20240911201757.1505453-12-saeed@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c

index bda74cb9c9750bf533c269ad526e139556fd6097..4f55e55ecb5513591236a942056202678e5d66fd 100644 (file)
@@ -412,7 +412,8 @@ static int mlx5_check_dev_ids(struct mlx5_core_dev *dev, u16 dev_id)
        return 0;
 }
 
-static bool mlx5_is_reset_now_capable(struct mlx5_core_dev *dev)
+static bool mlx5_is_reset_now_capable(struct mlx5_core_dev *dev,
+                                     u8 reset_method)
 {
        u16 dev_id;
        int err;
@@ -423,9 +424,11 @@ static bool mlx5_is_reset_now_capable(struct mlx5_core_dev *dev)
        }
 
 #if IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE)
-       err = mlx5_check_hotplug_interrupt(dev);
-       if (err)
-               return false;
+       if (reset_method != MLX5_MFRL_REG_PCI_RESET_METHOD_HOT_RESET) {
+               err = mlx5_check_hotplug_interrupt(dev);
+               if (err)
+                       return false;
+       }
 #endif
 
        err = pci_read_config_word(dev->pdev, PCI_DEVICE_ID, &dev_id);
@@ -446,7 +449,7 @@ static void mlx5_sync_reset_request_event(struct work_struct *work)
                mlx5_core_warn(dev, "Failed reading MFRL, err %d\n", err);
 
        if (err || test_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags) ||
-           !mlx5_is_reset_now_capable(dev)) {
+           !mlx5_is_reset_now_capable(dev, fw_reset->reset_method)) {
                err = mlx5_fw_reset_set_reset_sync_nack(dev);
                mlx5_core_warn(dev, "PCI Sync FW Update Reset Nack %s",
                               err ? "Failed" : "Sent");