From: Alexander Kozyrev <akozyrev@nvidia.com>
To: <dev@dpdk.org>
Cc: <stable@dpdk.org>, <rasland@nvidia.com>, <viacheslavo@nvidia.com>,
<matan@nvidia.com>, <dsosnowski@nvidia.com>, <bingz@nvidia.com>,
<suanmingm@nvidia.com>
Subject: [PATCH v3] net/mlx5: fix miniCQEs number calculation
Date: Wed, 13 Nov 2024 15:50:54 +0200 [thread overview]
Message-ID: <20241113135103.4105722-1-akozyrev@nvidia.com> (raw)
In-Reply-To: <20241028171458.2264985-1-akozyrev@nvidia.com>
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: 6cb559d67b ("net/mlx5: add vectorized Rx/Tx burst for x86")
Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h | 3 +--
drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 3 +--
drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 3 +--
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
index b2bbc4ba17..ec827368e6 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
@@ -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,
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
index 0ce9827ed9..b60226ddeb 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
@@ -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);
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
index e71d6c303f..0273fdb54a 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
+++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
@@ -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);
--
2.43.5
next prev parent reply other threads:[~2024-11-13 13:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-28 16:42 [PATCH] " Alexander Kozyrev
2024-10-28 17:08 ` Slava Ovsiienko
2024-10-28 17:14 ` [PATCH v2] " Alexander Kozyrev
2024-11-12 14:49 ` Slava Ovsiienko
2024-11-13 13:50 ` Alexander Kozyrev [this message]
2024-11-13 15:28 ` [PATCH v3] " Raslan Darawsheh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241113135103.4105722-1-akozyrev@nvidia.com \
--to=akozyrev@nvidia.com \
--cc=bingz@nvidia.com \
--cc=dev@dpdk.org \
--cc=dsosnowski@nvidia.com \
--cc=matan@nvidia.com \
--cc=rasland@nvidia.com \
--cc=stable@dpdk.org \
--cc=suanmingm@nvidia.com \
--cc=viacheslavo@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).