net/mlx5: Refactor calculation of required completion vectors
authorEli Cohen <elic@nvidia.com>
Tue, 3 Jan 2023 07:16:11 +0000 (09:16 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Fri, 24 Mar 2023 23:04:30 +0000 (16:04 -0700)
Move the calculation to a separate function. We will add more
functionality to it in a follow up patch.

Signed-off-by: Eli Cohen <elic@nvidia.com>
Reviewed-by: Shay Drory <shayd@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
drivers/net/ethernet/mellanox/mlx5/core/eq.c

index 888ccfc..66696c9 100644 (file)
@@ -1113,26 +1113,34 @@ void mlx5_core_eq_free_irqs(struct mlx5_core_dev *dev)
 #define MLX5_MAX_ASYNC_EQS 3
 #endif
 
-int mlx5_eq_table_create(struct mlx5_core_dev *dev)
+static int get_num_eqs(struct mlx5_core_dev *dev)
 {
        struct mlx5_eq_table *eq_table = dev->priv.eq_table;
-       int num_eqs = MLX5_CAP_GEN(dev, max_num_eqs) ?
+       int max_dev_eqs;
+       int max_eqs_sf;
+       int num_eqs;
+
+       max_dev_eqs = MLX5_CAP_GEN(dev, max_num_eqs) ?
                      MLX5_CAP_GEN(dev, max_num_eqs) :
                      1 << MLX5_CAP_GEN(dev, log_max_eq);
-       int max_eqs_sf;
-       int err;
 
-       eq_table->num_comp_eqs =
-               min_t(int,
-                     mlx5_irq_table_get_num_comp(eq_table->irq_table),
-                     num_eqs - MLX5_MAX_ASYNC_EQS);
+       num_eqs = min_t(int, mlx5_irq_table_get_num_comp(eq_table->irq_table),
+                       max_dev_eqs - MLX5_MAX_ASYNC_EQS);
        if (mlx5_core_is_sf(dev)) {
                max_eqs_sf = min_t(int, MLX5_COMP_EQS_PER_SF,
                                   mlx5_irq_table_get_sfs_vec(eq_table->irq_table));
-               eq_table->num_comp_eqs = min_t(int, eq_table->num_comp_eqs,
-                                              max_eqs_sf);
+               num_eqs = min_t(int, num_eqs, max_eqs_sf);
        }
 
+       return num_eqs;
+}
+
+int mlx5_eq_table_create(struct mlx5_core_dev *dev)
+{
+       struct mlx5_eq_table *eq_table = dev->priv.eq_table;
+       int err;
+
+       eq_table->num_comp_eqs = get_num_eqs(dev);
        err = create_async_eqs(dev);
        if (err) {
                mlx5_core_err(dev, "Failed to create async EQs\n");