net/mlx5: Set default grace period based on function type
authorMaher Sanalla <msanalla@nvidia.com>
Sun, 2 Oct 2022 04:56:29 +0000 (21:56 -0700)
committerJakub Kicinski <kuba@kernel.org>
Mon, 3 Oct 2022 23:55:29 +0000 (16:55 -0700)
Currently, driver sets the same grace period for fw fatal health reporter
to any type of function.

Since the lower level functions are more vulnerable to fw fatal errors as a
result of parent function closure/reload, set a smaller grace period for
the lower level functions, as follows:

1. For ECPF: 180 seconds.
2. For PF: 60 seconds.
3. For VF/SF: 30 seconds.

Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/health.c

index 5bfc54a..86ed87d 100644 (file)
@@ -702,11 +702,25 @@ static const struct devlink_health_reporter_ops mlx5_fw_fatal_reporter_ops = {
                .dump = mlx5_fw_fatal_reporter_dump,
 };
 
-#define MLX5_REPORTER_FW_GRACEFUL_PERIOD 1200000
+#define MLX5_FW_REPORTER_ECPF_GRACEFUL_PERIOD 180000
+#define MLX5_FW_REPORTER_PF_GRACEFUL_PERIOD 60000
+#define MLX5_FW_REPORTER_VF_GRACEFUL_PERIOD 30000
+#define MLX5_FW_REPORTER_DEFAULT_GRACEFUL_PERIOD MLX5_FW_REPORTER_VF_GRACEFUL_PERIOD
+
 static void mlx5_fw_reporters_create(struct mlx5_core_dev *dev)
 {
        struct mlx5_core_health *health = &dev->priv.health;
        struct devlink *devlink = priv_to_devlink(dev);
+       u64 grace_period;
+
+       if (mlx5_core_is_ecpf(dev)) {
+               grace_period = MLX5_FW_REPORTER_ECPF_GRACEFUL_PERIOD;
+       } else if (mlx5_core_is_pf(dev)) {
+               grace_period = MLX5_FW_REPORTER_PF_GRACEFUL_PERIOD;
+       } else {
+               /* VF or SF */
+               grace_period = MLX5_FW_REPORTER_DEFAULT_GRACEFUL_PERIOD;
+       }
 
        health->fw_reporter =
                devlink_health_reporter_create(devlink, &mlx5_fw_reporter_ops,
@@ -718,7 +732,7 @@ static void mlx5_fw_reporters_create(struct mlx5_core_dev *dev)
        health->fw_fatal_reporter =
                devlink_health_reporter_create(devlink,
                                               &mlx5_fw_fatal_reporter_ops,
-                                              MLX5_REPORTER_FW_GRACEFUL_PERIOD,
+                                              grace_period,
                                               dev);
        if (IS_ERR(health->fw_fatal_reporter))
                mlx5_core_warn(dev, "Failed to create fw fatal reporter, err = %ld\n",