mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 11:38:26 +07:00
net/mlx5e: Enhance ICOSQ WQE info fields
The same WQE opcode might be used in different ICOSQ flows and WQE types. To have a better distinguishability, replace it with an enum that better indicates the WQE type and flow it is used for. Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Reviewed-by: Maxim Mikityanskiy <maximmi@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
6b74f60ef5
commit
28bff09518
@ -27,6 +27,11 @@
|
||||
|
||||
#define INL_HDR_START_SZ (sizeof(((struct mlx5_wqe_eth_seg *)NULL)->inline_hdr.start))
|
||||
|
||||
enum mlx5e_icosq_wqe_type {
|
||||
MLX5E_ICOSQ_WQE_NOP,
|
||||
MLX5E_ICOSQ_WQE_UMR_RX,
|
||||
};
|
||||
|
||||
static inline bool
|
||||
mlx5e_wqc_has_room_for(struct mlx5_wq_cyc *wq, u16 cc, u16 pc, u16 n)
|
||||
{
|
||||
@ -120,10 +125,10 @@ static inline u16 mlx5e_txqsq_get_next_pi(struct mlx5e_txqsq *sq, u16 size)
|
||||
}
|
||||
|
||||
struct mlx5e_icosq_wqe_info {
|
||||
u8 opcode;
|
||||
u8 wqe_type;
|
||||
u8 num_wqebbs;
|
||||
|
||||
/* Auxiliary data for different opcodes. */
|
||||
/* Auxiliary data for different wqe types. */
|
||||
union {
|
||||
struct {
|
||||
struct mlx5e_rq *rq;
|
||||
@ -147,7 +152,7 @@ static inline u16 mlx5e_icosq_get_next_pi(struct mlx5e_icosq *sq, u16 size)
|
||||
/* Fill SQ frag edge with NOPs to avoid WQE wrapping two pages. */
|
||||
for (; wi < edge_wi; wi++) {
|
||||
*wi = (struct mlx5e_icosq_wqe_info) {
|
||||
.opcode = MLX5_OPCODE_NOP,
|
||||
.wqe_type = MLX5E_ICOSQ_WQE_NOP,
|
||||
.num_wqebbs = 1,
|
||||
};
|
||||
mlx5e_post_nop(wq, sq->sqn, &sq->pc);
|
||||
|
@ -506,7 +506,7 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix)
|
||||
umr_wqe->uctrl.xlt_offset = cpu_to_be16(xlt_offset);
|
||||
|
||||
sq->db.wqe_info[pi] = (struct mlx5e_icosq_wqe_info) {
|
||||
.opcode = MLX5_OPCODE_UMR,
|
||||
.wqe_type = MLX5E_ICOSQ_WQE_UMR_RX,
|
||||
.num_wqebbs = MLX5E_UMR_WQEBBS,
|
||||
.umr.rq = rq,
|
||||
};
|
||||
@ -619,15 +619,18 @@ int mlx5e_poll_ico_cq(struct mlx5e_cq *cq)
|
||||
break;
|
||||
}
|
||||
|
||||
if (likely(wi->opcode == MLX5_OPCODE_UMR))
|
||||
switch (wi->wqe_type) {
|
||||
case MLX5E_ICOSQ_WQE_UMR_RX:
|
||||
wi->umr.rq->mpwqe.umr_completed++;
|
||||
else if (unlikely(wi->opcode != MLX5_OPCODE_NOP))
|
||||
break;
|
||||
case MLX5E_ICOSQ_WQE_NOP:
|
||||
break;
|
||||
default:
|
||||
netdev_WARN_ONCE(cq->channel->netdev,
|
||||
"Bad OPCODE in ICOSQ WQE info: 0x%x\n",
|
||||
wi->opcode);
|
||||
|
||||
"Bad WQE type in ICOSQ WQE info: 0x%x\n",
|
||||
wi->wqe_type);
|
||||
}
|
||||
} while (!last_wqe);
|
||||
|
||||
} while ((++i < MLX5E_TX_CQ_POLL_BUDGET) && (cqe = mlx5_cqwq_get_cqe(&cq->wq)));
|
||||
|
||||
sq->cc = sqcc;
|
||||
|
@ -79,7 +79,7 @@ void mlx5e_trigger_irq(struct mlx5e_icosq *sq)
|
||||
u16 pi = mlx5_wq_cyc_ctr2ix(wq, sq->pc);
|
||||
|
||||
sq->db.wqe_info[pi] = (struct mlx5e_icosq_wqe_info) {
|
||||
.opcode = MLX5_OPCODE_NOP,
|
||||
.wqe_type = MLX5E_ICOSQ_WQE_NOP,
|
||||
.num_wqebbs = 1,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user