Skip to content

Commit

Permalink
net/mlx5: fix miniCQEs number calculation
Browse files Browse the repository at this point in the history
Use the information from the CQE, not from the title packet,
for getting the number of miniCQEs in the compressed CQEs array.
This way we can avoid segfaults in the rxq_cq_decompress_v()
in case of mbuf corruption (due to double mbuf free, for example).

Fixes: 6cb559d ("net/mlx5: add vectorized Rx/Tx burst for x86")
Cc: [email protected]

Signed-off-by: Alexander Kozyrev <[email protected]>
Acked-by: Viacheslav Ovsiienko <[email protected]>
  • Loading branch information
aleks-kozyrev authored and raslandarawsheh committed Nov 13, 2024
1 parent 969e73b commit 7ee1978
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 6 deletions.
3 changes: 1 addition & 2 deletions drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
11, 10, 9, 8}; /* bswap32, rss */
/* Restore the compressed count. Must be 16 bits. */
uint16_t mcqe_n = (rxq->cqe_comp_layout) ?
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1) :
t_pkt->data_len + (rxq->crc_present * RTE_ETHER_CRC_LEN);
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1U) : rte_be_to_cpu_32(cq->byte_cnt);
uint16_t pkts_n = mcqe_n;
const __vector unsigned char rearm =
(__vector unsigned char)vec_vsx_ld(0,
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/mlx5/mlx5_rxtx_vec_neon.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
};
/* Restore the compressed count. Must be 16 bits. */
uint16_t mcqe_n = (rxq->cqe_comp_layout) ?
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1) :
t_pkt->data_len + (rxq->crc_present * RTE_ETHER_CRC_LEN);
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1U) : rte_be_to_cpu_32(cq->byte_cnt);
uint16_t pkts_n = mcqe_n;
const uint64x2_t rearm =
vld1q_u64((void *)&t_pkt->rearm_data);
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/mlx5/mlx5_rxtx_vec_sse.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
-1, -1, -1, -1 /* skip packet_type */);
/* Restore the compressed count. Must be 16 bits. */
uint16_t mcqe_n = (rxq->cqe_comp_layout) ?
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1) :
t_pkt->data_len + (rxq->crc_present * RTE_ETHER_CRC_LEN);
(MLX5_CQE_NUM_MINIS(cq->op_own) + 1U) : rte_be_to_cpu_32(cq->byte_cnt);
uint16_t pkts_n = mcqe_n;
const __m128i rearm =
_mm_loadu_si128((__m128i *)&t_pkt->rearm_data);
Expand Down

0 comments on commit 7ee1978

Please sign in to comment.