net/mlx5: Add new page type for EC VF pages
authorDaniel Jurgens <danielj@nvidia.com>
Mon, 6 Mar 2023 22:53:21 +0000 (00:53 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Sat, 10 Jun 2023 01:40:51 +0000 (18:40 -0700)
When the embedded cpu supports SRIOV it can be enabled and disabled
independently from the host SRIOV. Track the pages separately so we can
properly wait for returned VF pages.

Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: William Tu <witu@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 bb95b40d25eb5d224f1d424f0d111d8ca441d94c..fc13b41cc9b28376f1d5f4cfd75812aac5053c2a 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_ec_vfs", 0400, pages, &dev->priv.page_counters[MLX5_EC_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);
index 95dc67fb300157aa8071d40ce667d0e43dd1b7af..dcf58efac159cf7286fd11483330c6750e290a19 100644 (file)
@@ -79,7 +79,13 @@ 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 func_id <= mlx5_core_max_vfs(dev) ?  MLX5_VF : MLX5_SF;
+       if (func_id <= max(mlx5_core_max_vfs(dev), mlx5_core_max_ec_vfs(dev))) {
+               if (ec_function)
+                       return MLX5_EC_VF;
+               else
+                       return MLX5_VF;
+       }
+       return MLX5_SF;
 }
 
 static u32 mlx5_get_ec_function(u32 function)
@@ -730,6 +736,9 @@ int mlx5_reclaim_startup_pages(struct mlx5_core_dev *dev)
        WARN(dev->priv.page_counters[MLX5_HOST_PF],
             "External host PF FW pages counter is %d after reclaiming all pages\n",
             dev->priv.page_counters[MLX5_HOST_PF]);
+       WARN(dev->priv.page_counters[MLX5_EC_VF],
+            "EC VFs FW pages counter is %d after reclaiming all pages\n",
+            dev->priv.page_counters[MLX5_EC_VF]);
 
        return 0;
 }
index 252b6a6965b8258746fd9e5feb29405957c452ed..18a608a1f567b2744c17043e5abf758fba80b1fd 100644 (file)
@@ -581,6 +581,7 @@ enum mlx5_func_type {
        MLX5_VF,
        MLX5_SF,
        MLX5_HOST_PF,
+       MLX5_EC_VF,
        MLX5_FUNC_TYPE_NUM,
 };