[v2,1/3] eventdev: add element offset to event vector

Message ID 20220921164342.2174-1-pbhagavatula@marvell.com (mailing list archive)
State Accepted, archived
Delegated to: Jerin Jacob
Headers
Series [v2,1/3] eventdev: add element offset to event vector |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing warning apply patch failure

Commit Message

Pavan Nikhilesh Bhagavatula Sept. 21, 2022, 4:43 p.m. UTC
  From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Add `rte_event_vector:elem_offset:12` bit field event vector
structure the bits are taken from `rte_event_vector::rsvd:15`.
The element offset defines the offset into the vector array
at which valid elements start.
The valid elements count will be equal to
`rte_event_vector::nb_elem`.

Update Rx/Tx adapter SW implementation to use elem_offset.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v2 Changes:
 - Revert changes to definition of `rte_event_vector::nb_elem`

 lib/eventdev/rte_event_eth_rx_adapter.c | 1 +
 lib/eventdev/rte_event_eth_tx_adapter.c | 8 +++++---
 lib/eventdev/rte_eventdev.h             | 6 ++++--
 3 files changed, 10 insertions(+), 5 deletions(-)

--
2.25.1
  

Comments

Mattias Rönnblom Sept. 22, 2022, 5:40 a.m. UTC | #1
On 2022-09-21 18:43, pbhagavatula@marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Add `rte_event_vector:elem_offset:12` bit field event vector
> structure the bits are taken from `rte_event_vector::rsvd:15`.
> The element offset defines the offset into the vector array
> at which valid elements start.
> The valid elements count will be equal to
> `rte_event_vector::nb_elem`.
> 
> Update Rx/Tx adapter SW implementation to use elem_offset.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>   v2 Changes:
>   - Revert changes to definition of `rte_event_vector::nb_elem`
> 
>   lib/eventdev/rte_event_eth_rx_adapter.c | 1 +
>   lib/eventdev/rte_event_eth_tx_adapter.c | 8 +++++---
>   lib/eventdev/rte_eventdev.h             | 6 ++++--
>   3 files changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
> index bf8741d2ea..bd72f9b845 100644
> --- a/lib/eventdev/rte_event_eth_rx_adapter.c
> +++ b/lib/eventdev/rte_event_eth_rx_adapter.c
> @@ -855,6 +855,7 @@ rxa_init_vector(struct event_eth_rx_adapter *rx_adapter,
>   	vec->vector_ev->port = vec->port;
>   	vec->vector_ev->queue = vec->queue;
>   	vec->vector_ev->attr_valid = true;
> +	vec->vector_ev->elem_offset = 0;
>   	TAILQ_INSERT_TAIL(&rx_adapter->vector_list, vec, next);
>   }
> 
> diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
> index b4b37f1cae..ccc7fffcce 100644
> --- a/lib/eventdev/rte_event_eth_tx_adapter.c
> +++ b/lib/eventdev/rte_event_eth_tx_adapter.c
> @@ -524,16 +524,18 @@ txa_process_event_vector(struct txa_service_data *txa,
>   		queue = vec->queue;
>   		tqi = txa_service_queue(txa, port, queue);
>   		if (unlikely(tqi == NULL || !tqi->added)) {
> -			rte_pktmbuf_free_bulk(mbufs, vec->nb_elem);
> +			rte_pktmbuf_free_bulk(&mbufs[vec->elem_offset],
> +					      vec->nb_elem);
>   			rte_mempool_put(rte_mempool_from_obj(vec), vec);
>   			return 0;
>   		}
>   		for (i = 0; i < vec->nb_elem; i++) {
>   			nb_tx += rte_eth_tx_buffer(port, queue, tqi->tx_buf,
> -						   mbufs[i]);
> +						   mbufs[i + vec->elem_offset]);
>   		}
>   	} else {
> -		for (i = 0; i < vec->nb_elem; i++) {
> +		for (i = vec->elem_offset; i < vec->elem_offset + vec->nb_elem;
> +		     i++) {
>   			port = mbufs[i]->port;
>   			queue = rte_event_eth_tx_adapter_txq_get(mbufs[i]);
>   			tqi = txa_service_queue(txa, port, queue);
> diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> index 6a6f6ea4c1..f9fd44604e 100644
> --- a/lib/eventdev/rte_eventdev.h
> +++ b/lib/eventdev/rte_eventdev.h
> @@ -1060,8 +1060,10 @@ rte_event_dev_close(uint8_t dev_id);
>    */
>   struct rte_event_vector {
>   	uint16_t nb_elem;
> -	/**< Number of elements in this event vector. */
> -	uint16_t rsvd : 15;
> +	/**< Number of elements valid in this event vector. */
> +	uint16_t elem_offset : 12;
> +	/**< Offset into the vector array where valid elements start from. */
> +	uint16_t rsvd : 3;
>   	/**< Reserved for future use */
>   	uint16_t attr_valid : 1;
>   	/**< Indicates that the below union attributes have valid information.
> --
> 2.25.1

Reviewed-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
  
Jerin Jacob Sept. 27, 2022, 1:42 p.m. UTC | #2
On Thu, Sep 22, 2022 at 11:10 AM Mattias Rönnblom
<mattias.ronnblom@ericsson.com> wrote:
>
> On 2022-09-21 18:43, pbhagavatula@marvell.com wrote:
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > Add `rte_event_vector:elem_offset:12` bit field event vector
> > structure the bits are taken from `rte_event_vector::rsvd:15`.
> > The element offset defines the offset into the vector array
> > at which valid elements start.
> > The valid elements count will be equal to
> > `rte_event_vector::nb_elem`.
> >
> > Update Rx/Tx adapter SW implementation to use elem_offset.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > ---
> >   v2 Changes:
> >   - Revert changes to definition of `rte_event_vector::nb_elem`
> >

> >    */
> >   struct rte_event_vector {
> >       uint16_t nb_elem;
> > -     /**< Number of elements in this event vector. */
> > -     uint16_t rsvd : 15;
> > +     /**< Number of elements valid in this event vector. */
> > +     uint16_t elem_offset : 12;
> > +     /**< Offset into the vector array where valid elements start from. */
> > +     uint16_t rsvd : 3;
> >       /**< Reserved for future use */
> >       uint16_t attr_valid : 1;
> >       /**< Indicates that the below union attributes have valid information.
> > --
> > 2.25.1
>
> Reviewed-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>

Series applied to dpdk-next-net-eventdev/for-main. Thanks
  

Patch

diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index bf8741d2ea..bd72f9b845 100644
--- a/lib/eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/eventdev/rte_event_eth_rx_adapter.c
@@ -855,6 +855,7 @@  rxa_init_vector(struct event_eth_rx_adapter *rx_adapter,
 	vec->vector_ev->port = vec->port;
 	vec->vector_ev->queue = vec->queue;
 	vec->vector_ev->attr_valid = true;
+	vec->vector_ev->elem_offset = 0;
 	TAILQ_INSERT_TAIL(&rx_adapter->vector_list, vec, next);
 }

diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
index b4b37f1cae..ccc7fffcce 100644
--- a/lib/eventdev/rte_event_eth_tx_adapter.c
+++ b/lib/eventdev/rte_event_eth_tx_adapter.c
@@ -524,16 +524,18 @@  txa_process_event_vector(struct txa_service_data *txa,
 		queue = vec->queue;
 		tqi = txa_service_queue(txa, port, queue);
 		if (unlikely(tqi == NULL || !tqi->added)) {
-			rte_pktmbuf_free_bulk(mbufs, vec->nb_elem);
+			rte_pktmbuf_free_bulk(&mbufs[vec->elem_offset],
+					      vec->nb_elem);
 			rte_mempool_put(rte_mempool_from_obj(vec), vec);
 			return 0;
 		}
 		for (i = 0; i < vec->nb_elem; i++) {
 			nb_tx += rte_eth_tx_buffer(port, queue, tqi->tx_buf,
-						   mbufs[i]);
+						   mbufs[i + vec->elem_offset]);
 		}
 	} else {
-		for (i = 0; i < vec->nb_elem; i++) {
+		for (i = vec->elem_offset; i < vec->elem_offset + vec->nb_elem;
+		     i++) {
 			port = mbufs[i]->port;
 			queue = rte_event_eth_tx_adapter_txq_get(mbufs[i]);
 			tqi = txa_service_queue(txa, port, queue);
diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
index 6a6f6ea4c1..f9fd44604e 100644
--- a/lib/eventdev/rte_eventdev.h
+++ b/lib/eventdev/rte_eventdev.h
@@ -1060,8 +1060,10 @@  rte_event_dev_close(uint8_t dev_id);
  */
 struct rte_event_vector {
 	uint16_t nb_elem;
-	/**< Number of elements in this event vector. */
-	uint16_t rsvd : 15;
+	/**< Number of elements valid in this event vector. */
+	uint16_t elem_offset : 12;
+	/**< Offset into the vector array where valid elements start from. */
+	uint16_t rsvd : 3;
 	/**< Reserved for future use */
 	uint16_t attr_valid : 1;
 	/**< Indicates that the below union attributes have valid information.