> -----Original Message-----
> From: Eads, Gage
> Sent: Thursday, November 30, 2017 4:21 AM
> To: dev@dpdk.org
> Cc: jerin.ja...@caviumnetworks.com; Van Haaren, Harry
> <harry.van.haa...@intel.com>; Richardson, Bruce
> <bruce.richard...@intel.com>; hemant.agra...@nxp.com; nipun.gu...@nxp.com;
> santosh.shu...@caviumnetworks.com
> Subject: [PATCH 1/2] eventdev: add implicit release disable capability
> 
> This commit introduces a capability for disabling the "implicit" release
> functionality for a port, which prevents the eventdev PMD from issuing
> outstanding releases for previously dequeued events when dequeuing a new
> batch of events.
> 
> If a PMD does not support this capability, the application will receive an
> error if it attempts to setup a port with implicit releases disabled.
> Otherwise, if the port is configured with implicit releases disabled, the
> application must release each dequeued event by invoking
> rte_event_enqueue_burst() with RTE_EVENT_OP_RELEASE or
> RTE_EVENT_OP_FORWARD.
> 
> Signed-off-by: Gage Eads <gage.e...@intel.com>

Some comments inline. In general, I think this makes sense, and is the easiest 
solution that I can see.


>  drivers/event/dpaa2/dpaa2_eventdev.c       |  2 ++
>  drivers/event/octeontx/ssovf_evdev.c       |  1 +
>  drivers/event/skeleton/skeleton_eventdev.c |  1 +
>  drivers/event/sw/sw_evdev.c                | 10 +++++++---
>  drivers/event/sw/sw_evdev.h                |  1 +
>  drivers/event/sw/sw_evdev_worker.c         | 16 ++++++++--------
>  examples/eventdev_pipeline_sw_pmd/main.c   | 24 +++++++++++++++++++++++-
>  lib/librte_eventdev/rte_eventdev.c         |  9 +++++++++
>  lib/librte_eventdev/rte_eventdev.h         | 23 ++++++++++++++++++++---
>  test/test/test_eventdev.c                  |  9 +++++++++
>  test/test/test_eventdev_sw.c               | 20 ++++++++++++++++++--
>  11 files changed, 99 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c
> b/drivers/event/dpaa2/dpaa2_eventdev.c
> index eeeb231..236b211 100644
> --- a/drivers/event/dpaa2/dpaa2_eventdev.c
> +++ b/drivers/event/dpaa2/dpaa2_eventdev.c
> @@ -440,6 +440,8 @@ dpaa2_eventdev_port_def_conf(struct rte_eventdev *dev,
> uint8_t port_id,
>               DPAA2_EVENT_MAX_PORT_DEQUEUE_DEPTH;
>       port_conf->enqueue_depth =
>               DPAA2_EVENT_MAX_PORT_ENQUEUE_DEPTH;
> +     port_conf->disable_implicit_release =
> +             0;

Merge "0;" onto previous line?

<snip>

> --- a/drivers/event/skeleton/skeleton_eventdev.c
> +++ b/drivers/event/skeleton/skeleton_eventdev.c
> @@ -237,6 +237,7 @@ skeleton_eventdev_port_def_conf(struct rte_eventdev
> *dev, uint8_t port_id,
>       port_conf->new_event_threshold = 32 * 1024;
>       port_conf->dequeue_depth = 16;
>       port_conf->enqueue_depth = 16;
> +     port_conf->disable_implicit_release = false;

Prefer 0 to false.

<snip>

> diff --git a/examples/eventdev_pipeline_sw_pmd/main.c
> b/examples/eventdev_pipeline_sw_pmd/main.c
> index 5f431d8..3910b53 100644
> --- a/examples/eventdev_pipeline_sw_pmd/main.c
> +++ b/examples/eventdev_pipeline_sw_pmd/main.c
> @@ -62,6 +62,7 @@ struct prod_data {
>  struct cons_data {
>       uint8_t dev_id;
>       uint8_t port_id;
> +     bool release;

I'd personally uint8_t this instead of bool, which requires <stdbool.h>. I 
haven't seen stdbool.h in other DPDK headers, so suggesting stick with the good 
old byte-sized integers for flags.. 


>  } __rte_cache_aligned;
> 
>  static struct prod_data prod_data;
> @@ -167,6 +168,18 @@ consumer(void)
>               uint8_t outport = packets[i].mbuf->port;
>               rte_eth_tx_buffer(outport, 0, fdata->tx_buf[outport],
>                               packets[i].mbuf);
> +
> +             packets[i].op = RTE_EVENT_OP_RELEASE;
> +     }
> +
> +     if (cons_data.release) {
> +             uint16_t nb_tx;
> +
> +             nb_tx = rte_event_enqueue_burst(dev_id, port_id, packets, n);
> +             while (nb_tx < n)
> +                     nb_tx += rte_event_enqueue_burst(dev_id, port_id,
> +                                                      packets + nb_tx,
> +                                                      n - nb_tx);
>       }
> 
>       /* Print out mpps every 1<22 packets */
> @@ -702,6 +715,7 @@ setup_eventdev(struct prod_data *prod_data,
>       };
> 
>       struct port_link worker_queues[MAX_NUM_STAGES];
> +     bool disable_implicit_release;

Same uint8_t over stdbool.h comment as above


> @@ -3240,7 +3244,7 @@ test_sw_eventdev(void)
>       if (rte_lcore_count() >= 3) {
>               printf("*** Running Worker loopback test...\n");
> -             ret = worker_loopback(t);
> +             ret = worker_loopback(t, 0);
>               if (ret != 0) {
>                       printf("ERROR - Worker loopback test FAILED.\n");
>                       return ret;
> @@ -3249,6 +3253,18 @@ test_sw_eventdev(void)
>               printf("### Not enough cores for worker loopback test.\n");
>               printf("### Need at least 3 cores for test.\n");
>       }
> +     if (rte_lcore_count() >= 3) {
> +             printf("*** Running Worker loopback test (implicit release
> disabled)...\n");
> +             ret = worker_loopback(t, 1);
> +             if (ret != 0) {
> +                     printf("ERROR - Worker loopback test FAILED.\n");
> +                     return ret;
> +             }
> +     } else {
> +             printf("### Not enough cores for worker loopback test.\n");
> +             printf("### Need at least 3 cores for test.\n");
> +     }

The double if (count >= 3) here looks like it could be removed and the 
loopback(t, 1) added to the first if()- but otherwise the logic is fine.


With the above changes, this looks good to me!

Acked-by: Harry van Haaren <harry.van.haa...@intel.com>

Reply via email to