net/mlx5: fix metadata for compressed Rx CQEs
Checks
Commit Message
If packets with the same metadata are received with compressed CQE
the metadata value is not copied from the title packet in vectorized
rx_burst routines, it causes wrong metadat values seeing by
applications.
Fixes: a18ac6113331 ("net/mlx5: add metadata support to Rx datapath")
Cc: stable@dpdk.org
Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h | 13 +++++++++++++
drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 13 +++++++++++++
drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 14 +++++++++++++-
3 files changed, 39 insertions(+), 1 deletion(-)
Comments
From: Viacheslav Ovsiienko
> If packets with the same metadata are received with compressed CQE the
> metadata value is not copied from the title packet in vectorized rx_burst
> routines, it causes wrong metadat values seeing by applications.
>
> Fixes: a18ac6113331 ("net/mlx5: add metadata support to Rx datapath")
> Cc: stable@dpdk.org
>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
Hi,
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Viacheslav Ovsiienko
> Sent: Tuesday, March 24, 2020 2:15 PM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@mellanox.com>; stable@dpdk.org
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix metadata for compressed Rx CQEs
>
> If packets with the same metadata are received with compressed CQE
> the metadata value is not copied from the title packet in vectorized
> rx_burst routines, it causes wrong metadat values seeing by
> applications.
>
> Fixes: a18ac6113331 ("net/mlx5: add metadata support to Rx datapath")
> Cc: stable@dpdk.org
>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> ---
> drivers/net/mlx5/mlx5_rxtx_vec_altivec.h | 13 +++++++++++++
> drivers/net/mlx5/mlx5_rxtx_vec_neon.h | 13 +++++++++++++
> drivers/net/mlx5/mlx5_rxtx_vec_sse.h | 14 +++++++++++++-
> 3 files changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
> b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
> index aa43cab..ae5c857 100644
> --- a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
> +++ b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h
> @@ -263,6 +263,19 @@
> elts[pos + 2]->hash.fdir.hi = flow_tag;
> elts[pos + 3]->hash.fdir.hi = flow_tag;
> }
> + if (rte_flow_dynf_metadata_avail()) {
> + const uint32_t meta =
> *RTE_FLOW_DYNF_METADATA(t_pkt);
> +
> + /* Check if title packet has valid metadata. */
> + if (meta) {
> + MLX5_ASSERT(t_pkt->ol_flags &
> + PKT_RX_DYNF_METADATA);
> + *RTE_FLOW_DYNF_METADATA(elts[pos]) =
> meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 1])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 2])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 3])
> = meta;
> + }
> + }
>
> pos += MLX5_VPMD_DESCS_PER_LOOP;
> /* Move to next CQE and invalidate consumed CQEs. */
> diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
> b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
> index 6d952df..701e5e0 100644
> --- a/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
> +++ b/drivers/net/mlx5/mlx5_rxtx_vec_neon.h
> @@ -205,6 +205,19 @@
> elts[pos + 2]->hash.fdir.hi = flow_tag;
> elts[pos + 3]->hash.fdir.hi = flow_tag;
> }
> + if (rte_flow_dynf_metadata_avail()) {
> + const uint32_t meta =
> *RTE_FLOW_DYNF_METADATA(t_pkt);
> +
> + /* Check if title packet has valid metadata. */
> + if (meta) {
> + MLX5_ASSERT(t_pkt->ol_flags &
> + PKT_RX_DYNF_METADATA);
> + *RTE_FLOW_DYNF_METADATA(elts[pos]) =
> meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 1])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 2])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 3])
> = meta;
> + }
> + }
> pos += MLX5_VPMD_DESCS_PER_LOOP;
> /* Move to next CQE and invalidate consumed CQEs. */
> if (!(pos & 0x7) && pos < mcqe_n) {
> diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
> b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
> index 406f23f..a4086df 100644
> --- a/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
> +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.h
> @@ -118,7 +118,6 @@
> 14, 15, 6, 7,
> 10, 11, 2, 3);
> #endif
> -
> /*
> * A. load mCQEs into a 128bit register.
> * B. store rearm data to mbuf.
> @@ -191,6 +190,19 @@
> elts[pos + 2]->hash.fdir.hi = flow_tag;
> elts[pos + 3]->hash.fdir.hi = flow_tag;
> }
> + if (rte_flow_dynf_metadata_avail()) {
> + const uint32_t meta =
> *RTE_FLOW_DYNF_METADATA(t_pkt);
> +
> + /* Check if title packet has valid metadata. */
> + if (meta) {
> + MLX5_ASSERT(t_pkt->ol_flags &
> + PKT_RX_DYNF_METADATA);
> + *RTE_FLOW_DYNF_METADATA(elts[pos]) =
> meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 1])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 2])
> = meta;
> + *RTE_FLOW_DYNF_METADATA(elts[pos + 3])
> = meta;
> + }
> + }
> pos += MLX5_VPMD_DESCS_PER_LOOP;
> /* Move to next CQE and invalidate consumed CQEs. */
> if (!(pos & 0x7) && pos < mcqe_n) {
> --
> 1.8.3.1
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -263,6 +263,19 @@
elts[pos + 2]->hash.fdir.hi = flow_tag;
elts[pos + 3]->hash.fdir.hi = flow_tag;
}
+ if (rte_flow_dynf_metadata_avail()) {
+ const uint32_t meta = *RTE_FLOW_DYNF_METADATA(t_pkt);
+
+ /* Check if title packet has valid metadata. */
+ if (meta) {
+ MLX5_ASSERT(t_pkt->ol_flags &
+ PKT_RX_DYNF_METADATA);
+ *RTE_FLOW_DYNF_METADATA(elts[pos]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 1]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 2]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 3]) = meta;
+ }
+ }
pos += MLX5_VPMD_DESCS_PER_LOOP;
/* Move to next CQE and invalidate consumed CQEs. */
@@ -205,6 +205,19 @@
elts[pos + 2]->hash.fdir.hi = flow_tag;
elts[pos + 3]->hash.fdir.hi = flow_tag;
}
+ if (rte_flow_dynf_metadata_avail()) {
+ const uint32_t meta = *RTE_FLOW_DYNF_METADATA(t_pkt);
+
+ /* Check if title packet has valid metadata. */
+ if (meta) {
+ MLX5_ASSERT(t_pkt->ol_flags &
+ PKT_RX_DYNF_METADATA);
+ *RTE_FLOW_DYNF_METADATA(elts[pos]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 1]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 2]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 3]) = meta;
+ }
+ }
pos += MLX5_VPMD_DESCS_PER_LOOP;
/* Move to next CQE and invalidate consumed CQEs. */
if (!(pos & 0x7) && pos < mcqe_n) {
@@ -118,7 +118,6 @@
14, 15, 6, 7,
10, 11, 2, 3);
#endif
-
/*
* A. load mCQEs into a 128bit register.
* B. store rearm data to mbuf.
@@ -191,6 +190,19 @@
elts[pos + 2]->hash.fdir.hi = flow_tag;
elts[pos + 3]->hash.fdir.hi = flow_tag;
}
+ if (rte_flow_dynf_metadata_avail()) {
+ const uint32_t meta = *RTE_FLOW_DYNF_METADATA(t_pkt);
+
+ /* Check if title packet has valid metadata. */
+ if (meta) {
+ MLX5_ASSERT(t_pkt->ol_flags &
+ PKT_RX_DYNF_METADATA);
+ *RTE_FLOW_DYNF_METADATA(elts[pos]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 1]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 2]) = meta;
+ *RTE_FLOW_DYNF_METADATA(elts[pos + 3]) = meta;
+ }
+ }
pos += MLX5_VPMD_DESCS_PER_LOOP;
/* Move to next CQE and invalidate consumed CQEs. */
if (!(pos & 0x7) && pos < mcqe_n) {