net/mlx5e: Add recovery flow in case of error CQE
The rep legacy RQ completion handling was missing the appropriate handling of error CQEs (dump the CQE and queue a recover work), fix it by calling trigger_report() when needed. Since all CQE handling flows do the exact same error CQE handling, extract it to a common helper function. Signed-off-by: Gal Pressman <gal@nvidia.com> Reviewed-by: Aya Levin <ayal@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
68511b48bf
commit
5dd29f40b2
@ -1603,6 +1603,12 @@ static void trigger_report(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
}
|
||||
}
|
||||
|
||||
static void mlx5e_handle_rx_err_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
{
|
||||
trigger_report(rq, cqe);
|
||||
rq->stats->wqe_err++;
|
||||
}
|
||||
|
||||
static void mlx5e_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
{
|
||||
struct mlx5_wq_cyc *wq = &rq->wqe.wq;
|
||||
@ -1616,8 +1622,7 @@ static void mlx5e_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
cqe_bcnt = be32_to_cpu(cqe->byte_cnt);
|
||||
|
||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
||||
trigger_report(rq, cqe);
|
||||
rq->stats->wqe_err++;
|
||||
mlx5e_handle_rx_err_cqe(rq, cqe);
|
||||
goto free_wqe;
|
||||
}
|
||||
|
||||
@ -1670,7 +1675,7 @@ static void mlx5e_handle_rx_cqe_rep(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
cqe_bcnt = be32_to_cpu(cqe->byte_cnt);
|
||||
|
||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
||||
rq->stats->wqe_err++;
|
||||
mlx5e_handle_rx_err_cqe(rq, cqe);
|
||||
goto free_wqe;
|
||||
}
|
||||
|
||||
@ -1719,8 +1724,7 @@ static void mlx5e_handle_rx_cqe_mpwrq_rep(struct mlx5e_rq *rq, struct mlx5_cqe64
|
||||
wi->consumed_strides += cstrides;
|
||||
|
||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
||||
trigger_report(rq, cqe);
|
||||
rq->stats->wqe_err++;
|
||||
mlx5e_handle_rx_err_cqe(rq, cqe);
|
||||
goto mpwrq_cqe_out;
|
||||
}
|
||||
|
||||
@ -1988,8 +1992,7 @@ static void mlx5e_handle_rx_cqe_mpwrq_shampo(struct mlx5e_rq *rq, struct mlx5_cq
|
||||
wi->consumed_strides += cstrides;
|
||||
|
||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
||||
trigger_report(rq, cqe);
|
||||
stats->wqe_err++;
|
||||
mlx5e_handle_rx_err_cqe(rq, cqe);
|
||||
goto mpwrq_cqe_out;
|
||||
}
|
||||
|
||||
@ -2058,8 +2061,7 @@ static void mlx5e_handle_rx_cqe_mpwrq(struct mlx5e_rq *rq, struct mlx5_cqe64 *cq
|
||||
wi->consumed_strides += cstrides;
|
||||
|
||||
if (unlikely(MLX5E_RX_ERR_CQE(cqe))) {
|
||||
trigger_report(rq, cqe);
|
||||
rq->stats->wqe_err++;
|
||||
mlx5e_handle_rx_err_cqe(rq, cqe);
|
||||
goto mpwrq_cqe_out;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user