net/mlx5e: Refactor rx_res_init() and rx_res_free() APIs
authorAdham Faris <afaris@nvidia.com>
Thu, 12 Oct 2023 19:27:45 +0000 (12:27 -0700)
committerSaeed Mahameed <saeedm@nvidia.com>
Sat, 14 Oct 2023 17:16:32 +0000 (10:16 -0700)
Refactor mlx5e_rx_res_init() and mlx5e_rx_res_free() by wrapping
mlx5e_rx_res_alloc() and mlx5e_rx_res_destroy() API's respectively.

Signed-off-by: Adham Faris <afaris@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c

index 56e6b8c..abbd08b 100644 (file)
@@ -284,7 +284,12 @@ struct mlx5e_rss *mlx5e_rx_res_rss_get(struct mlx5e_rx_res *res, u32 rss_idx)
 
 /* End of API rx_res_rss_* */
 
-struct mlx5e_rx_res *mlx5e_rx_res_alloc(void)
+static void mlx5e_rx_res_free(struct mlx5e_rx_res *res)
+{
+       kvfree(res);
+}
+
+static struct mlx5e_rx_res *mlx5e_rx_res_alloc(void)
 {
        return kvzalloc(sizeof(struct mlx5e_rx_res), GFP_KERNEL);
 }
@@ -404,13 +409,19 @@ static void mlx5e_rx_res_ptp_destroy(struct mlx5e_rx_res *res)
        mlx5e_rqt_destroy(&res->ptp.rqt);
 }
 
-int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev,
-                     enum mlx5e_rx_res_features features, unsigned int max_nch,
-                     u32 drop_rqn, const struct mlx5e_packet_merge_param *init_pkt_merge_param,
-                     unsigned int init_nch)
+struct mlx5e_rx_res *
+mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
+                   unsigned int max_nch, u32 drop_rqn,
+                   const struct mlx5e_packet_merge_param *init_pkt_merge_param,
+                   unsigned int init_nch)
 {
+       struct mlx5e_rx_res *res;
        int err;
 
+       res = mlx5e_rx_res_alloc();
+       if (!res)
+               return ERR_PTR(-ENOMEM);
+
        res->mdev = mdev;
        res->features = features;
        res->max_nch = max_nch;
@@ -421,7 +432,7 @@ int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev,
 
        err = mlx5e_rx_res_rss_init_def(res, init_nch);
        if (err)
-               goto err_out;
+               goto err_rx_res_free;
 
        err = mlx5e_rx_res_channels_init(res);
        if (err)
@@ -431,14 +442,15 @@ int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev,
        if (err)
                goto err_channels_destroy;
 
-       return 0;
+       return res;
 
 err_channels_destroy:
        mlx5e_rx_res_channels_destroy(res);
 err_rss_destroy:
        __mlx5e_rx_res_rss_destroy(res, 0);
-err_out:
-       return err;
+err_rx_res_free:
+       mlx5e_rx_res_free(res);
+       return ERR_PTR(err);
 }
 
 void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res)
@@ -446,11 +458,7 @@ void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res)
        mlx5e_rx_res_ptp_destroy(res);
        mlx5e_rx_res_channels_destroy(res);
        mlx5e_rx_res_rss_destroy_all(res);
-}
-
-void mlx5e_rx_res_free(struct mlx5e_rx_res *res)
-{
-       kvfree(res);
+       mlx5e_rx_res_free(res);
 }
 
 u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix)
index 580fe8b..4fa8366 100644 (file)
@@ -21,13 +21,12 @@ enum mlx5e_rx_res_features {
 };
 
 /* Setup */
-struct mlx5e_rx_res *mlx5e_rx_res_alloc(void);
-int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev,
-                     enum mlx5e_rx_res_features features, unsigned int max_nch,
-                     u32 drop_rqn, const struct mlx5e_packet_merge_param *init_pkt_merge_param,
-                     unsigned int init_nch);
+struct mlx5e_rx_res *
+mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features features,
+                   unsigned int max_nch, u32 drop_rqn,
+                   const struct mlx5e_packet_merge_param *init_pkt_merge_param,
+                   unsigned int init_nch);
 void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res);
-void mlx5e_rx_res_free(struct mlx5e_rx_res *res);
 
 /* TIRN getters for flow steering */
 u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix);
index afc3d48..5daec30 100644 (file)
@@ -5389,10 +5389,6 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
        enum mlx5e_rx_res_features features;
        int err;
 
-       priv->rx_res = mlx5e_rx_res_alloc();
-       if (!priv->rx_res)
-               return -ENOMEM;
-
        mlx5e_create_q_counters(priv);
 
        err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
@@ -5404,12 +5400,16 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
        features = MLX5E_RX_RES_FEATURE_PTP;
        if (mlx5_tunnel_inner_ft_supported(mdev))
                features |= MLX5E_RX_RES_FEATURE_INNER_FT;
-       err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, features,
-                               priv->max_nch, priv->drop_rq.rqn,
-                               &priv->channels.params.packet_merge,
-                               priv->channels.params.num_channels);
-       if (err)
+
+       priv->rx_res = mlx5e_rx_res_create(priv->mdev, features, priv->max_nch, priv->drop_rq.rqn,
+                                          &priv->channels.params.packet_merge,
+                                          priv->channels.params.num_channels);
+       if (IS_ERR(priv->rx_res)) {
+               err = PTR_ERR(priv->rx_res);
+               priv->rx_res = NULL;
+               mlx5_core_err(mdev, "create rx resources failed, %d\n", err);
                goto err_close_drop_rq;
+       }
 
        err = mlx5e_create_flow_steering(priv->fs, priv->rx_res, priv->profile,
                                         priv->netdev);
@@ -5439,12 +5439,11 @@ err_destroy_flow_steering:
                                    priv->profile);
 err_destroy_rx_res:
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = NULL;
 err_close_drop_rq:
        mlx5e_close_drop_rq(&priv->drop_rq);
 err_destroy_q_counters:
        mlx5e_destroy_q_counters(priv);
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
        return err;
 }
 
@@ -5455,10 +5454,9 @@ static void mlx5e_cleanup_nic_rx(struct mlx5e_priv *priv)
        mlx5e_destroy_flow_steering(priv->fs, !!(priv->netdev->hw_features & NETIF_F_NTUPLE),
                                    priv->profile);
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = NULL;
        mlx5e_close_drop_rq(&priv->drop_rq);
        mlx5e_destroy_q_counters(priv);
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
 }
 
 static void mlx5e_set_mqprio_rl(struct mlx5e_priv *priv)
index 2fdb889..82dc27e 100644 (file)
@@ -998,26 +998,22 @@ static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
        struct mlx5_core_dev *mdev = priv->mdev;
        int err;
 
-       priv->rx_res = mlx5e_rx_res_alloc();
-       if (!priv->rx_res) {
-               err = -ENOMEM;
-               goto err_free_fs;
-       }
-
        mlx5e_fs_init_l2_addr(priv->fs, priv->netdev);
 
        err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
        if (err) {
                mlx5_core_err(mdev, "open drop rq failed, %d\n", err);
-               goto err_rx_res_free;
+               goto err_free_fs;
        }
 
-       err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, 0,
-                               priv->max_nch, priv->drop_rq.rqn,
-                               &priv->channels.params.packet_merge,
-                               priv->channels.params.num_channels);
-       if (err)
+       priv->rx_res = mlx5e_rx_res_create(priv->mdev, 0, priv->max_nch, priv->drop_rq.rqn,
+                                          &priv->channels.params.packet_merge,
+                                          priv->channels.params.num_channels);
+       if (IS_ERR(priv->rx_res)) {
+               err = PTR_ERR(priv->rx_res);
+               mlx5_core_err(mdev, "Create rx resources failed, err=%d\n", err);
                goto err_close_drop_rq;
+       }
 
        err = mlx5e_create_rep_ttc_table(priv);
        if (err)
@@ -1041,11 +1037,9 @@ err_destroy_ttc_table:
        mlx5_destroy_ttc_table(mlx5e_fs_get_ttc(priv->fs, false));
 err_destroy_rx_res:
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = ERR_PTR(-EINVAL);
 err_close_drop_rq:
        mlx5e_close_drop_rq(&priv->drop_rq);
-err_rx_res_free:
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
 err_free_fs:
        mlx5e_fs_cleanup(priv->fs);
        priv->fs = NULL;
@@ -1059,9 +1053,8 @@ static void mlx5e_cleanup_rep_rx(struct mlx5e_priv *priv)
        mlx5e_destroy_rep_root_ft(priv);
        mlx5_destroy_ttc_table(mlx5e_fs_get_ttc(priv->fs, false));
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = ERR_PTR(-EINVAL);
        mlx5e_close_drop_rq(&priv->drop_rq);
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
 }
 
 static void mlx5e_rep_mpesw_work(struct work_struct *work)
index baa7ef8..2bf77a5 100644 (file)
@@ -418,12 +418,6 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
                return -ENOMEM;
        }
 
-       priv->rx_res = mlx5e_rx_res_alloc();
-       if (!priv->rx_res) {
-               err = -ENOMEM;
-               goto err_free_fs;
-       }
-
        mlx5e_create_q_counters(priv);
 
        err = mlx5e_open_drop_rq(priv, &priv->drop_rq);
@@ -432,12 +426,13 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
                goto err_destroy_q_counters;
        }
 
-       err = mlx5e_rx_res_init(priv->rx_res, priv->mdev, 0,
-                               priv->max_nch, priv->drop_rq.rqn,
-                               &priv->channels.params.packet_merge,
-                               priv->channels.params.num_channels);
-       if (err)
+       priv->rx_res = mlx5e_rx_res_create(priv->mdev, 0, priv->max_nch, priv->drop_rq.rqn,
+                                          &priv->channels.params.packet_merge,
+                                          priv->channels.params.num_channels);
+       if (IS_ERR(priv->rx_res)) {
+               err = PTR_ERR(priv->rx_res);
                goto err_close_drop_rq;
+       }
 
        err = mlx5i_create_flow_steering(priv);
        if (err)
@@ -447,13 +442,11 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
 
 err_destroy_rx_res:
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = ERR_PTR(-EINVAL);
 err_close_drop_rq:
        mlx5e_close_drop_rq(&priv->drop_rq);
 err_destroy_q_counters:
        mlx5e_destroy_q_counters(priv);
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
-err_free_fs:
        mlx5e_fs_cleanup(priv->fs);
        return err;
 }
@@ -462,10 +455,9 @@ static void mlx5i_cleanup_rx(struct mlx5e_priv *priv)
 {
        mlx5i_destroy_flow_steering(priv);
        mlx5e_rx_res_destroy(priv->rx_res);
+       priv->rx_res = ERR_PTR(-EINVAL);
        mlx5e_close_drop_rq(&priv->drop_rq);
        mlx5e_destroy_q_counters(priv);
-       mlx5e_rx_res_free(priv->rx_res);
-       priv->rx_res = NULL;
        mlx5e_fs_cleanup(priv->fs);
 }