mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
net/mlx5e: Decouple CQ from priv
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>
This commit is contained in:
parent
b1a33e6513
commit
db52aa6df8
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
|
|||
memset(¶m_cq, 0, sizeof(param_cq));
|
||||
mlx5e_build_sq_param(priv->mdev, params, ¶m_sq);
|
||||
mlx5e_build_tx_cq_param(priv->mdev, params, ¶m_cq);
|
||||
err = mlx5e_open_cq(priv, params->tx_cq_moderation, ¶m_cq, &ccp, &sq->cq);
|
||||
err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, ¶m_cq, &ccp, &sq->cq);
|
||||
if (err)
|
||||
goto err_free_sq;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user