net/mlx5e: Generalize direct-TIRs and direct-RQTs API
authorAya Levin <ayal@nvidia.com>
Thu, 25 Feb 2021 15:46:25 +0000 (17:46 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Fri, 26 Mar 2021 02:50:09 +0000 (19:50 -0700)
Add input parameter indicating the size of direct-TIRs/direct-RQTs array
to be created/destroyed. This allows next patches in the patch-set to
handle a single direct-TIR pointing to a direct-RQT with a single entry.

Signed-off-by: Aya Levin <ayal@nvidia.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/en.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 2a9b40a..1158d8a 100644 (file)
@@ -1080,10 +1080,10 @@ int mlx5e_create_indirect_rqt(struct mlx5e_priv *priv);
 int mlx5e_create_indirect_tirs(struct mlx5e_priv *priv, bool inner_ttc);
 void mlx5e_destroy_indirect_tirs(struct mlx5e_priv *priv);
 
-int mlx5e_create_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs);
-void mlx5e_destroy_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs);
-int mlx5e_create_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs);
-void mlx5e_destroy_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs);
+int mlx5e_create_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n);
+void mlx5e_destroy_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n);
+int mlx5e_create_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n);
+void mlx5e_destroy_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n);
 void mlx5e_destroy_rqt(struct mlx5e_priv *priv, struct mlx5e_rqt *rqt);
 
 int mlx5e_create_tis(struct mlx5_core_dev *mdev, void *in, u32 *tisn);
index f2884ed..df941fe 100644 (file)
@@ -2223,12 +2223,12 @@ int mlx5e_create_indirect_rqt(struct mlx5e_priv *priv)
        return err;
 }
 
-int mlx5e_create_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs)
+int mlx5e_create_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n)
 {
        int err;
        int ix;
 
-       for (ix = 0; ix < priv->max_nch; ix++) {
+       for (ix = 0; ix < n; ix++) {
                err = mlx5e_create_rqt(priv, 1 /*size */, &tirs[ix].rqt);
                if (unlikely(err))
                        goto err_destroy_rqts;
@@ -2244,11 +2244,11 @@ err_destroy_rqts:
        return err;
 }
 
-void mlx5e_destroy_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs)
+void mlx5e_destroy_direct_rqts(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n)
 {
        int i;
 
-       for (i = 0; i < priv->max_nch; i++)
+       for (i = 0; i < n; i++)
                mlx5e_destroy_rqt(priv, &tirs[i].rqt);
 }
 
@@ -3249,7 +3249,7 @@ err_destroy_inner_tirs:
        return err;
 }
 
-int mlx5e_create_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs)
+int mlx5e_create_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n)
 {
        struct mlx5e_tir *tir;
        void *tirc;
@@ -3263,7 +3263,7 @@ int mlx5e_create_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs)
        if (!in)
                return -ENOMEM;
 
-       for (ix = 0; ix < priv->max_nch; ix++) {
+       for (ix = 0; ix < n; ix++) {
                memset(in, 0, inlen);
                tir = &tirs[ix];
                tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
@@ -3301,11 +3301,11 @@ void mlx5e_destroy_indirect_tirs(struct mlx5e_priv *priv)
                mlx5e_destroy_tir(priv->mdev, &priv->inner_indir_tir[i]);
 }
 
-void mlx5e_destroy_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs)
+void mlx5e_destroy_direct_tirs(struct mlx5e_priv *priv, struct mlx5e_tir *tirs, int n)
 {
        int i;
 
-       for (i = 0; i < priv->max_nch; i++)
+       for (i = 0; i < n; i++)
                mlx5e_destroy_tir(priv->mdev, &tirs[i]);
 }
 
@@ -4901,6 +4901,7 @@ static void mlx5e_nic_cleanup(struct mlx5e_priv *priv)
 static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
+       u16 max_nch = priv->max_nch;
        int err;
 
        mlx5e_create_q_counters(priv);
@@ -4915,7 +4916,7 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_close_drop_rq;
 
-       err = mlx5e_create_direct_rqts(priv, priv->direct_tir);
+       err = mlx5e_create_direct_rqts(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_rqts;
 
@@ -4923,15 +4924,15 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_destroy_direct_rqts;
 
-       err = mlx5e_create_direct_tirs(priv, priv->direct_tir);
+       err = mlx5e_create_direct_tirs(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_tirs;
 
-       err = mlx5e_create_direct_rqts(priv, priv->xsk_tir);
+       err = mlx5e_create_direct_rqts(priv, priv->xsk_tir, max_nch);
        if (unlikely(err))
                goto err_destroy_direct_tirs;
 
-       err = mlx5e_create_direct_tirs(priv, priv->xsk_tir);
+       err = mlx5e_create_direct_tirs(priv, priv->xsk_tir, max_nch);
        if (unlikely(err))
                goto err_destroy_xsk_rqts;
 
@@ -4960,15 +4961,15 @@ err_tc_nic_cleanup:
 err_destroy_flow_steering:
        mlx5e_destroy_flow_steering(priv);
 err_destroy_xsk_tirs:
-       mlx5e_destroy_direct_tirs(priv, priv->xsk_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->xsk_tir, max_nch);
 err_destroy_xsk_rqts:
-       mlx5e_destroy_direct_rqts(priv, priv->xsk_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->xsk_tir, max_nch);
 err_destroy_direct_tirs:
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_tirs:
        mlx5e_destroy_indirect_tirs(priv);
 err_destroy_direct_rqts:
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_rqts:
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
 err_close_drop_rq:
@@ -4980,14 +4981,16 @@ err_destroy_q_counters:
 
 static void mlx5e_cleanup_nic_rx(struct mlx5e_priv *priv)
 {
+       u16 max_nch = priv->max_nch;
+
        mlx5e_accel_cleanup_rx(priv);
        mlx5e_tc_nic_cleanup(priv);
        mlx5e_destroy_flow_steering(priv);
-       mlx5e_destroy_direct_tirs(priv, priv->xsk_tir);
-       mlx5e_destroy_direct_rqts(priv, priv->xsk_tir);
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->xsk_tir, max_nch);
+       mlx5e_destroy_direct_rqts(priv, priv->xsk_tir, max_nch);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_indirect_tirs(priv);
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
        mlx5e_close_drop_rq(&priv->drop_rq);
        mlx5e_destroy_q_counters(priv);
index e5123e9..b597fc3 100644 (file)
@@ -753,6 +753,7 @@ int mlx5e_rep_bond_update(struct mlx5e_priv *priv, bool cleanup)
 static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
+       u16 max_nch = priv->max_nch;
        int err;
 
        mlx5e_init_l2_addr(priv);
@@ -767,7 +768,7 @@ static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_close_drop_rq;
 
-       err = mlx5e_create_direct_rqts(priv, priv->direct_tir);
+       err = mlx5e_create_direct_rqts(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_rqts;
 
@@ -775,7 +776,7 @@ static int mlx5e_init_rep_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_destroy_direct_rqts;
 
-       err = mlx5e_create_direct_tirs(priv, priv->direct_tir);
+       err = mlx5e_create_direct_tirs(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_tirs;
 
@@ -800,11 +801,11 @@ err_destroy_root_ft:
 err_destroy_ttc_table:
        mlx5e_destroy_ttc_table(priv, &priv->fs.ttc);
 err_destroy_direct_tirs:
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_tirs:
        mlx5e_destroy_indirect_tirs(priv);
 err_destroy_direct_rqts:
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_rqts:
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
 err_close_drop_rq:
@@ -814,13 +815,15 @@ err_close_drop_rq:
 
 static void mlx5e_cleanup_rep_rx(struct mlx5e_priv *priv)
 {
+       u16 max_nch = priv->max_nch;
+
        mlx5e_ethtool_cleanup_steering(priv);
        rep_vport_rx_rule_destroy(priv);
        mlx5e_destroy_rep_root_ft(priv);
        mlx5e_destroy_ttc_table(priv, &priv->fs.ttc);
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_indirect_tirs(priv);
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
        mlx5e_close_drop_rq(&priv->drop_rq);
 }
index 79f26b5..63ca731 100644 (file)
@@ -373,6 +373,7 @@ static void mlx5i_destroy_flow_steering(struct mlx5e_priv *priv)
 static int mlx5i_init_rx(struct mlx5e_priv *priv)
 {
        struct mlx5_core_dev *mdev = priv->mdev;
+       u16 max_nch = priv->max_nch;
        int err;
 
        mlx5e_create_q_counters(priv);
@@ -387,7 +388,7 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_close_drop_rq;
 
-       err = mlx5e_create_direct_rqts(priv, priv->direct_tir);
+       err = mlx5e_create_direct_rqts(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_rqts;
 
@@ -395,7 +396,7 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        if (err)
                goto err_destroy_direct_rqts;
 
-       err = mlx5e_create_direct_tirs(priv, priv->direct_tir);
+       err = mlx5e_create_direct_tirs(priv, priv->direct_tir, max_nch);
        if (err)
                goto err_destroy_indirect_tirs;
 
@@ -406,11 +407,11 @@ static int mlx5i_init_rx(struct mlx5e_priv *priv)
        return 0;
 
 err_destroy_direct_tirs:
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_tirs:
        mlx5e_destroy_indirect_tirs(priv);
 err_destroy_direct_rqts:
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
 err_destroy_indirect_rqts:
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
 err_close_drop_rq:
@@ -422,10 +423,12 @@ err_destroy_q_counters:
 
 static void mlx5i_cleanup_rx(struct mlx5e_priv *priv)
 {
+       u16 max_nch = priv->max_nch;
+
        mlx5i_destroy_flow_steering(priv);
-       mlx5e_destroy_direct_tirs(priv, priv->direct_tir);
+       mlx5e_destroy_direct_tirs(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_indirect_tirs(priv);
-       mlx5e_destroy_direct_rqts(priv, priv->direct_tir);
+       mlx5e_destroy_direct_rqts(priv, priv->direct_tir, max_nch);
        mlx5e_destroy_rqt(priv, &priv->indir_rqt);
        mlx5e_close_drop_rq(&priv->drop_rq);
        mlx5e_destroy_q_counters(priv);