net/mlx5e: Decouple CQ from priv
authorTariq Toukan <tariqt@nvidia.com>
Fri, 4 Aug 2023 18:46:18 +0000 (21:46 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 14 Dec 2023 02:03:32 +0000 (18:03 -0800)
Make CQ struct and methods independent of "priv", use more basic
arguments instead.
This will ease the transition to netdev with multiple mdevs.

Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Gal Pressman <gal@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/params.c
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c
drivers/net/ethernet/mellanox/mlx5/core/en/trap.c
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c

index 6808e0d82944709ac62db60b95ff548d46eb68a8..efacad46a24e352200b68f4b660d58abd82a5133 100644 (file)
@@ -363,7 +363,7 @@ struct mlx5e_cq {
        /* control */
        struct net_device         *netdev;
        struct mlx5_core_dev      *mdev;
-       struct mlx5e_priv         *priv;
+       struct workqueue_struct   *workqueue;
        struct mlx5_wq_ctrl        wq_ctrl;
 } ____cacheline_aligned_in_smp;
 
@@ -1043,6 +1043,8 @@ int mlx5e_open_xdpsq(struct mlx5e_channel *c, struct mlx5e_params *params,
 void mlx5e_close_xdpsq(struct mlx5e_xdpsq *sq);
 
 struct mlx5e_create_cq_param {
+       struct net_device *netdev;
+       struct workqueue_struct *wq;
        struct napi_struct *napi;
        struct mlx5e_ch_stats *ch_stats;
        int node;
@@ -1050,7 +1052,7 @@ struct mlx5e_create_cq_param {
 };
 
 struct mlx5e_cq_param;
-int mlx5e_open_cq(struct mlx5e_priv *priv, struct dim_cq_moder moder,
+int mlx5e_open_cq(struct mlx5_core_dev *mdev, struct dim_cq_moder moder,
                  struct mlx5e_cq_param *param, struct mlx5e_create_cq_param *ccp,
                  struct mlx5e_cq *cq);
 void mlx5e_close_cq(struct mlx5e_cq *cq);
index e097f336e1c4a0ff1543bab027a4700aef8a6be2..284253b79266b937f4d654361c7b891278e9fda9 100644 (file)
@@ -669,6 +669,8 @@ void mlx5e_build_rq_params(struct mlx5_core_dev *mdev,
 void mlx5e_build_create_cq_param(struct mlx5e_create_cq_param *ccp, struct mlx5e_channel *c)
 {
        *ccp = (struct mlx5e_create_cq_param) {
+               .netdev = c->netdev,
+               .wq = c->priv->wq,
                .napi = &c->napi,
                .ch_stats = c->stats,
                .node = cpu_to_node(c->cpu),
index 04cec76c1ac4629bd274da023d33bbb06619c4fd..c206cc0a84832e6ebf104cc92990c43a81e94d60 100644 (file)
@@ -557,6 +557,8 @@ static int mlx5e_ptp_open_tx_cqs(struct mlx5e_ptp *c,
 
        num_tc = mlx5e_get_dcb_num_tc(params);
 
+       ccp.netdev   = c->netdev;
+       ccp.wq       = c->priv->wq;
        ccp.node     = dev_to_node(mlx5_core_dma_dev(c->mdev));
        ccp.ch_stats = c->stats;
        ccp.napi     = &c->napi;
@@ -567,7 +569,7 @@ static int mlx5e_ptp_open_tx_cqs(struct mlx5e_ptp *c,
        for (tc = 0; tc < num_tc; tc++) {
                struct mlx5e_cq *cq = &c->ptpsq[tc].txqsq.cq;
 
-               err = mlx5e_open_cq(c->priv, ptp_moder, cq_param, &ccp, cq);
+               err = mlx5e_open_cq(c->mdev, ptp_moder, cq_param, &ccp, cq);
                if (err)
                        goto out_err_txqsq_cq;
        }
@@ -576,7 +578,7 @@ static int mlx5e_ptp_open_tx_cqs(struct mlx5e_ptp *c,
                struct mlx5e_cq *cq = &c->ptpsq[tc].ts_cq;
                struct mlx5e_ptpsq *ptpsq = &c->ptpsq[tc];
 
-               err = mlx5e_open_cq(c->priv, ptp_moder, cq_param, &ccp, cq);
+               err = mlx5e_open_cq(c->mdev, ptp_moder, cq_param, &ccp, cq);
                if (err)
                        goto out_err_ts_cq;
 
@@ -604,6 +606,8 @@ static int mlx5e_ptp_open_rx_cq(struct mlx5e_ptp *c,
        struct mlx5e_cq_param *cq_param;
        struct mlx5e_cq *cq = &c->rq.cq;
 
+       ccp.netdev   = c->netdev;
+       ccp.wq       = c->priv->wq;
        ccp.node     = dev_to_node(mlx5_core_dma_dev(c->mdev));
        ccp.ch_stats = c->stats;
        ccp.napi     = &c->napi;
@@ -611,7 +615,7 @@ static int mlx5e_ptp_open_rx_cq(struct mlx5e_ptp *c,
 
        cq_param = &cparams->rq_param.cqp;
 
-       return mlx5e_open_cq(c->priv, ptp_moder, cq_param, &ccp, cq);
+       return mlx5e_open_cq(c->mdev, ptp_moder, cq_param, &ccp, cq);
 }
 
 static void mlx5e_ptp_close_tx_cqs(struct mlx5e_ptp *c)
index 9e2211f0c3a4e7e3cff9fd267cf5560de06b1142..34adf8c3f81a08d53d4d215aab68a893fd2da354 100644 (file)
@@ -124,7 +124,7 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
        memset(&param_cq, 0, sizeof(param_cq));
        mlx5e_build_sq_param(priv->mdev, params, &param_sq);
        mlx5e_build_tx_cq_param(priv->mdev, params, &param_cq);
-       err = mlx5e_open_cq(priv, params->tx_cq_moderation, &param_cq, &ccp, &sq->cq);
+       err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &param_cq, &ccp, &sq->cq);
        if (err)
                goto err_free_sq;
 
index 5620d9f9751808e02e8dea931b9c5ebe4851f01d..ac458a8d10e0f127e52cfdfac600912985c4a485 100644 (file)
@@ -68,11 +68,13 @@ static int mlx5e_open_trap_rq(struct mlx5e_priv *priv, struct mlx5e_trap *t)
 
        node = dev_to_node(mdev->device);
 
+       ccp.netdev   = priv->netdev;
+       ccp.wq       = priv->wq;
        ccp.node     = node;
        ccp.ch_stats = t->stats;
        ccp.napi     = &t->napi;
        ccp.ix       = 0;
-       err = mlx5e_open_cq(priv, trap_moder, &rq_param->cqp, &ccp, &rq->cq);
+       err = mlx5e_open_cq(priv->mdev, trap_moder, &rq_param->cqp, &ccp, &rq->cq);
        if (err)
                return err;
 
index 36826b58248478a4150818093ab29b4e04574c01..82e6abbc173423d436b268bebe168400f14eaeba 100644 (file)
@@ -127,7 +127,7 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
 
        mlx5e_build_xsk_cparam(priv->mdev, params, xsk, priv->q_counter, cparam);
 
-       err = mlx5e_open_cq(c->priv, params->rx_cq_moderation, &cparam->rq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, params->rx_cq_moderation, &cparam->rq.cqp, &ccp,
                            &c->xskrq.cq);
        if (unlikely(err))
                goto err_free_cparam;
@@ -136,7 +136,7 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
        if (unlikely(err))
                goto err_close_rx_cq;
 
-       err = mlx5e_open_cq(c->priv, params->tx_cq_moderation, &cparam->xdp_sq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &cparam->xdp_sq.cqp, &ccp,
                            &c->xsksq.cq);
        if (unlikely(err))
                goto err_close_rq;
index 78794268abe747f0b5cc7655fbc1835b908faf49..8e09f9740d277289c0d631a14301f2983fedd2ac 100644 (file)
@@ -1994,11 +1994,12 @@ void mlx5e_close_xdpsq(struct mlx5e_xdpsq *sq)
        mlx5e_free_xdpsq(sq);
 }
 
-static int mlx5e_alloc_cq_common(struct mlx5e_priv *priv,
+static int mlx5e_alloc_cq_common(struct mlx5_core_dev *mdev,
+                                struct net_device *netdev,
+                                struct workqueue_struct *workqueue,
                                 struct mlx5e_cq_param *param,
                                 struct mlx5e_cq *cq)
 {
-       struct mlx5_core_dev *mdev = priv->mdev;
        struct mlx5_core_cq *mcq = &cq->mcq;
        int err;
        u32 i;
@@ -2025,13 +2026,13 @@ static int mlx5e_alloc_cq_common(struct mlx5e_priv *priv,
        }
 
        cq->mdev = mdev;
-       cq->netdev = priv->netdev;
-       cq->priv = priv;
+       cq->netdev = netdev;
+       cq->workqueue = workqueue;
 
        return 0;
 }
 
-static int mlx5e_alloc_cq(struct mlx5e_priv *priv,
+static int mlx5e_alloc_cq(struct mlx5_core_dev *mdev,
                          struct mlx5e_cq_param *param,
                          struct mlx5e_create_cq_param *ccp,
                          struct mlx5e_cq *cq)
@@ -2042,7 +2043,7 @@ static int mlx5e_alloc_cq(struct mlx5e_priv *priv,
        param->wq.db_numa_node  = ccp->node;
        param->eq_ix            = ccp->ix;
 
-       err = mlx5e_alloc_cq_common(priv, param, cq);
+       err = mlx5e_alloc_cq_common(mdev, ccp->netdev, ccp->wq, param, cq);
 
        cq->napi     = ccp->napi;
        cq->ch_stats = ccp->ch_stats;
@@ -2108,14 +2109,13 @@ static void mlx5e_destroy_cq(struct mlx5e_cq *cq)
        mlx5_core_destroy_cq(cq->mdev, &cq->mcq);
 }
 
-int mlx5e_open_cq(struct mlx5e_priv *priv, struct dim_cq_moder moder,
+int mlx5e_open_cq(struct mlx5_core_dev *mdev, struct dim_cq_moder moder,
                  struct mlx5e_cq_param *param, struct mlx5e_create_cq_param *ccp,
                  struct mlx5e_cq *cq)
 {
-       struct mlx5_core_dev *mdev = priv->mdev;
        int err;
 
-       err = mlx5e_alloc_cq(priv, param, ccp, cq);
+       err = mlx5e_alloc_cq(mdev, param, ccp, cq);
        if (err)
                return err;
 
@@ -2148,7 +2148,7 @@ static int mlx5e_open_tx_cqs(struct mlx5e_channel *c,
        int tc;
 
        for (tc = 0; tc < c->num_tc; tc++) {
-               err = mlx5e_open_cq(c->priv, params->tx_cq_moderation, &cparam->txq_sq.cqp,
+               err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &cparam->txq_sq.cqp,
                                    ccp, &c->sq[tc].cq);
                if (err)
                        goto err_close_tx_cqs;
@@ -2352,12 +2352,12 @@ static int mlx5e_open_queues(struct mlx5e_channel *c,
 
        mlx5e_build_create_cq_param(&ccp, c);
 
-       err = mlx5e_open_cq(c->priv, icocq_moder, &cparam->async_icosq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, icocq_moder, &cparam->async_icosq.cqp, &ccp,
                            &c->async_icosq.cq);
        if (err)
                return err;
 
-       err = mlx5e_open_cq(c->priv, icocq_moder, &cparam->icosq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, icocq_moder, &cparam->icosq.cqp, &ccp,
                            &c->icosq.cq);
        if (err)
                goto err_close_async_icosq_cq;
@@ -2366,17 +2366,17 @@ static int mlx5e_open_queues(struct mlx5e_channel *c,
        if (err)
                goto err_close_icosq_cq;
 
-       err = mlx5e_open_cq(c->priv, params->tx_cq_moderation, &cparam->xdp_sq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &cparam->xdp_sq.cqp, &ccp,
                            &c->xdpsq.cq);
        if (err)
                goto err_close_tx_cqs;
 
-       err = mlx5e_open_cq(c->priv, params->rx_cq_moderation, &cparam->rq.cqp, &ccp,
+       err = mlx5e_open_cq(c->mdev, params->rx_cq_moderation, &cparam->rq.cqp, &ccp,
                            &c->rq.cq);
        if (err)
                goto err_close_xdp_tx_cqs;
 
-       err = c->xdp ? mlx5e_open_cq(c->priv, params->tx_cq_moderation, &cparam->xdp_sq.cqp,
+       err = c->xdp ? mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &cparam->xdp_sq.cqp,
                                     &ccp, &c->rq_xdpsq.cq) : 0;
        if (err)
                goto err_close_rx_cq;
@@ -3310,7 +3310,7 @@ static int mlx5e_alloc_drop_cq(struct mlx5e_priv *priv,
        param->wq.buf_numa_node = dev_to_node(mlx5_core_dma_dev(mdev));
        param->wq.db_numa_node  = dev_to_node(mlx5_core_dma_dev(mdev));
 
-       return mlx5e_alloc_cq_common(priv, param, cq);
+       return mlx5e_alloc_cq_common(priv->mdev, priv->netdev, priv->wq, param, cq);
 }
 
 int mlx5e_open_drop_rq(struct mlx5e_priv *priv,
index 8d9743a5e42c7c203d15b1f178221cdf3bd23135..a493c3716a99bb129f19b7e4bb818ce6d91f7f0c 100644 (file)
@@ -1039,7 +1039,7 @@ int mlx5e_poll_ico_cq(struct mlx5e_cq *cq)
                                                     (struct mlx5_err_cqe *)cqe);
                                mlx5_wq_cyc_wqe_dump(&sq->wq, ci, wi->num_wqebbs);
                                if (!test_and_set_bit(MLX5E_SQ_STATE_RECOVERING, &sq->state))
-                                       queue_work(cq->priv->wq, &sq->recover_work);
+                                       queue_work(cq->workqueue, &sq->recover_work);
                                break;
                        }
 
index f0b506e562df31d194490dd482ae6bf71b658706..5c166d9d2dca62a8db671c7cb62476781a8d1b97 100644 (file)
@@ -861,7 +861,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)
                                mlx5e_dump_error_cqe(&sq->cq, sq->sqn,
                                                     (struct mlx5_err_cqe *)cqe);
                                mlx5_wq_cyc_wqe_dump(&sq->wq, ci, wi->num_wqebbs);
-                               queue_work(cq->priv->wq, &sq->recover_work);
+                               queue_work(cq->workqueue, &sq->recover_work);
                        }
                        stats->cqe_err++;
                }