net/mlx5: Expose SF firmware pages counter
authorMaher Sanalla <msanalla@nvidia.com>
Sun, 22 Jan 2023 21:24:56 +0000 (23:24 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 8 Feb 2023 03:01:06 +0000 (19:01 -0800)
Currently, each core device has VF pages counter which stores number of
fw pages used by its VFs and SFs.

The current design led to a hang when performing firmware reset on DPU,
where the DPU PFs stalled in sriov unload flow due to waiting on release
of SFs pages instead of waiting on only VFs pages.

Thus, Add a separate counter for SF firmware pages, which will prevent
the stall scenario described above.

Fixes: 1958fc2f0712 ("net/mlx5: SF, Add auxiliary device driver")
Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Reviewed-by: Shay Drory <shayd@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
include/linux/mlx5/driver.h

index c3e7c24a0971e448bd6c18be3d5d5c9987b6dead..bb95b40d25eb5d224f1d424f0d111d8ca441d94c 100644 (file)
@@ -246,6 +246,7 @@ void mlx5_pages_debugfs_init(struct mlx5_core_dev *dev)
 
        debugfs_create_u32("fw_pages_total", 0400, pages, &dev->priv.fw_pages);
        debugfs_create_u32("fw_pages_vfs", 0400, pages, &dev->priv.page_counters[MLX5_VF]);
+       debugfs_create_u32("fw_pages_sfs", 0400, pages, &dev->priv.page_counters[MLX5_SF]);
        debugfs_create_u32("fw_pages_host_pf", 0400, pages, &dev->priv.page_counters[MLX5_HOST_PF]);
        debugfs_create_u32("fw_pages_alloc_failed", 0400, pages, &dev->priv.fw_pages_alloc_failed);
        debugfs_create_u32("fw_pages_give_dropped", 0400, pages, &dev->priv.give_pages_dropped);
index 9f99292ab5cedb90f042e68729533f3343182e70..0eb50be175cc4b791b0090ad2f0c86f96eda2fb6 100644 (file)
@@ -79,7 +79,7 @@ static u16 func_id_to_type(struct mlx5_core_dev *dev, u16 func_id, bool ec_funct
        if (!func_id)
                return mlx5_core_is_ecpf(dev) && !ec_function ? MLX5_HOST_PF : MLX5_PF;
 
-       return MLX5_VF;
+       return func_id <= mlx5_core_max_vfs(dev) ?  MLX5_VF : MLX5_SF;
 }
 
 static struct rb_root *page_root_per_function(struct mlx5_core_dev *dev, u32 function)
index 82a9bd4274b87bada9b2c7d50ee88fd7d245225c..333c1fec72f87d972461c73ec54487b5bcdca54d 100644 (file)
@@ -576,6 +576,7 @@ struct mlx5_debugfs_entries {
 enum mlx5_func_type {
        MLX5_PF,
        MLX5_VF,
+       MLX5_SF,
        MLX5_HOST_PF,
        MLX5_FUNC_TYPE_NUM,
 };