[v2,28/28] net/cnxk: fix multi-seg extraction in vwqe path

Message ID 20220422104709.20722-28-ndabilpuram@marvell.com (mailing list archive)
State Changes Requested, archived
Delegated to: Jerin Jacob
Headers
Series [v2,01/28] common/cnxk: add multi channel support for SDP send queues |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/github-robot: build success github build: passed
ci/intel-Testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Nithin Dabilpuram April 22, 2022, 10:47 a.m. UTC
  Fix multi-seg extraction in vwqe path to avoid updating mbuf[]
array until it is used via cq0 path.

Fixes: 7fbbc981d54f ("event/cnxk: support vectorized Rx event fast path")
Cc: pbhagavatula@marvell.com
Cc: stable@dpdk.org

Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
---
 drivers/net/cnxk/cn10k_rx.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
  

Comments

Pavan Nikhilesh Bhagavatula April 22, 2022, 10:54 a.m. UTC | #1
> -----Original Message-----
> From: Nithin Dabilpuram <ndabilpuram@marvell.com>
> Sent: Friday, April 22, 2022 4:17 PM
> To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Nithin Kumar
> Dabilpuram <ndabilpuram@marvell.com>; Kiran Kumar Kokkilagadda
> <kirankumark@marvell.com>; Sunil Kumar Kori <skori@marvell.com>; Satha
> Koteswara Rao Kottidi <skoteshwar@marvell.com>
> Cc: dev@dpdk.org; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>; stable@dpdk.org
> Subject: [PATCH v2 28/28] net/cnxk: fix multi-seg extraction in vwqe path
> 
> Fix multi-seg extraction in vwqe path to avoid updating mbuf[]
> array until it is used via cq0 path.
> 
> Fixes: 7fbbc981d54f ("event/cnxk: support vectorized Rx event fast path")
> Cc: pbhagavatula@marvell.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>

Acked-by: Pavan Nikhilesh <pbhagavatula@marvell.com>

> ---
>  drivers/net/cnxk/cn10k_rx.h | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h
> index 00bec01..5ecb20f 100644
> --- a/drivers/net/cnxk/cn10k_rx.h
> +++ b/drivers/net/cnxk/cn10k_rx.h
> @@ -1673,10 +1673,6 @@ cn10k_nix_recv_pkts_vector(void *args, struct
> rte_mbuf **mbufs, uint16_t pkts,
>  		vst1q_u64((uint64_t *)mbuf2->rearm_data, rearm2);
>  		vst1q_u64((uint64_t *)mbuf3->rearm_data, rearm3);
> 
> -		/* Store the mbufs to rx_pkts */
> -		vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
> -		vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
> -
>  		if (flags & NIX_RX_MULTI_SEG_F) {
>  			/* Multi segment is enable build mseg list for
>  			 * individual mbufs in scalar mode.
> @@ -1695,6 +1691,10 @@ cn10k_nix_recv_pkts_vector(void *args, struct
> rte_mbuf **mbufs, uint16_t pkts,
>  					    mbuf3, mbuf_initializer, flags);
>  		}
> 
> +		/* Store the mbufs to rx_pkts */
> +		vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
> +		vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
> +
>  		/* Mark mempool obj as "get" as it is alloc'ed by NIX */
>  		RTE_MEMPOOL_CHECK_COOKIES(mbuf0->pool, (void
> **)&mbuf0, 1, 1);
>  		RTE_MEMPOOL_CHECK_COOKIES(mbuf1->pool, (void
> **)&mbuf1, 1, 1);
> --
> 2.8.4
  
Jerin Jacob May 3, 2022, 5:36 p.m. UTC | #2
On Fri, Apr 22, 2022 at 4:20 PM Nithin Dabilpuram
<ndabilpuram@marvell.com> wrote:
>
> Fix multi-seg extraction in vwqe path to avoid updating mbuf[]
> array until it is used via cq0 path.
>
> Fixes: 7fbbc981d54f ("event/cnxk: support vectorized Rx event fast path")
> Cc: pbhagavatula@marvell.com
> Cc: stable@dpdk.org
>
> Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>

Please fix following check-gitlog.sh errors


Wrong headline prefix:
        net/cnxk: add receive channel backpressure for SDP
Is it candidate for Cc: stable@dpdk.org backport?
        common/cnxk: fix SQ flush sequence
        common/cnxk: fix issues in soft expiry disable path
        net/cnxk: optimize Rx fast path for security pkts


> ---
>  drivers/net/cnxk/cn10k_rx.h | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h
> index 00bec01..5ecb20f 100644
> --- a/drivers/net/cnxk/cn10k_rx.h
> +++ b/drivers/net/cnxk/cn10k_rx.h
> @@ -1673,10 +1673,6 @@ cn10k_nix_recv_pkts_vector(void *args, struct rte_mbuf **mbufs, uint16_t pkts,
>                 vst1q_u64((uint64_t *)mbuf2->rearm_data, rearm2);
>                 vst1q_u64((uint64_t *)mbuf3->rearm_data, rearm3);
>
> -               /* Store the mbufs to rx_pkts */
> -               vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
> -               vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
> -
>                 if (flags & NIX_RX_MULTI_SEG_F) {
>                         /* Multi segment is enable build mseg list for
>                          * individual mbufs in scalar mode.
> @@ -1695,6 +1691,10 @@ cn10k_nix_recv_pkts_vector(void *args, struct rte_mbuf **mbufs, uint16_t pkts,
>                                             mbuf3, mbuf_initializer, flags);
>                 }
>
> +               /* Store the mbufs to rx_pkts */
> +               vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
> +               vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
> +
>                 /* Mark mempool obj as "get" as it is alloc'ed by NIX */
>                 RTE_MEMPOOL_CHECK_COOKIES(mbuf0->pool, (void **)&mbuf0, 1, 1);
>                 RTE_MEMPOOL_CHECK_COOKIES(mbuf1->pool, (void **)&mbuf1, 1, 1);
> --
> 2.8.4
>
  

Patch

diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h
index 00bec01..5ecb20f 100644
--- a/drivers/net/cnxk/cn10k_rx.h
+++ b/drivers/net/cnxk/cn10k_rx.h
@@ -1673,10 +1673,6 @@  cn10k_nix_recv_pkts_vector(void *args, struct rte_mbuf **mbufs, uint16_t pkts,
 		vst1q_u64((uint64_t *)mbuf2->rearm_data, rearm2);
 		vst1q_u64((uint64_t *)mbuf3->rearm_data, rearm3);
 
-		/* Store the mbufs to rx_pkts */
-		vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
-		vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
-
 		if (flags & NIX_RX_MULTI_SEG_F) {
 			/* Multi segment is enable build mseg list for
 			 * individual mbufs in scalar mode.
@@ -1695,6 +1691,10 @@  cn10k_nix_recv_pkts_vector(void *args, struct rte_mbuf **mbufs, uint16_t pkts,
 					    mbuf3, mbuf_initializer, flags);
 		}
 
+		/* Store the mbufs to rx_pkts */
+		vst1q_u64((uint64_t *)&mbufs[packets], mbuf01);
+		vst1q_u64((uint64_t *)&mbufs[packets + 2], mbuf23);
+
 		/* Mark mempool obj as "get" as it is alloc'ed by NIX */
 		RTE_MEMPOOL_CHECK_COOKIES(mbuf0->pool, (void **)&mbuf0, 1, 1);
 		RTE_MEMPOOL_CHECK_COOKIES(mbuf1->pool, (void **)&mbuf1, 1, 1);