[v2,1/3] eventdev: add element offset to event vector
Checks
Commit Message
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
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>
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
@@ -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);
}
@@ -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);
@@ -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.