Skip to content

Commit

Permalink
net/mlx5: fix miniCQEs number calculation
Browse files Browse the repository at this point in the history
[ upstream commit a7ae9ba1f8c888a7ed546a88a954426477cd24a4 ]

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")

Signed-off-by: Alexander Kozyrev <[email protected]>
  • Loading branch information
aleks-kozyrev authored and kevintraynor committed Nov 27, 2024
1 parent 690f644 commit 2934c88
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 @@ -93,8 +93,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
-1, -1, /* skip vlan_tci */
11, 10, 9, 8}; /* bswap32, rss */
/* Restore the compressed count. Must be 16 bits. */
const uint16_t mcqe_n = t_pkt->data_len +
(rxq->crc_present * RTE_ETHER_CRC_LEN);
const uint16_t mcqe_n = rte_be_to_cpu_32(cq->byte_cnt);
const __vector unsigned char rearm =
(__vector unsigned char)vec_vsx_ld(0,
(signed int const *)&t_pkt->rearm_data);
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 @@ -92,8 +92,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
11, 10, 9, 8 /* hash.rss, bswap32 */
};
/* Restore the compressed count. Must be 16 bits. */
const uint16_t mcqe_n = t_pkt->data_len +
(rxq->crc_present * RTE_ETHER_CRC_LEN);
const uint16_t mcqe_n = rte_be_to_cpu_32(cq->byte_cnt);
const uint64x2_t rearm =
vld1q_u64((void *)&t_pkt->rearm_data);
const uint32x4_t rxdf_mask = {
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 @@ -92,8 +92,7 @@ rxq_cq_decompress_v(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cq,
-1, -1, 14, 15, /* pkt_len, bswap16 */
-1, -1, -1, -1 /* skip packet_type */);
/* Restore the compressed count. Must be 16 bits. */
const uint16_t mcqe_n = t_pkt->data_len +
(rxq->crc_present * RTE_ETHER_CRC_LEN);
const uint16_t mcqe_n = rte_be_to_cpu_32(cq->byte_cnt);
const __m128i rearm =
_mm_loadu_si128((__m128i *)&t_pkt->rearm_data);
const __m128i rxdf =
Expand Down

0 comments on commit 2934c88

Please sign in to comment.