[dpdk-dev] [EXT] [PATCH v4 3/3] examples/eventdev: move eth stop to the end

Jerin Jacob jerinjacobk at gmail.com
Tue Jan 26 14:37:25 CET 2021


On Mon, Jan 25, 2021 at 11:22 PM Pavan Nikhilesh Bhagavatula
<pbhagavatula at marvell.com> wrote:
>
> >Move eth stop code from "signal_handler" function to the end of
> >"main"
> >function. There are two reasons for this:
> >
> >First, this improves code maintenance and makes code look simple and
> >clear. Based on this change, after receiving the interrupt signal,
> >"fdata->done" is set as 1. Then the main thread will wait all worker
> >lcores to jump out of the loop. Finally, the main thread will stop and
> >then close eth dev port.
> >
> >Second, for older version, the main thread first stops eth dev port and
> >then waits the end of worker lcore. This may cause errors because it
> >may
> >stop the eth dev port which worker lcores are using. This moving
> >change
> >can fix this by waiting all worker threads to exit and then stop the
> >eth dev port.
> >
> >In the meanwhile, remove wmb in signal_handler.
> >
> >This is because when the main lcore receive the stop signal, it stores 1
> >into fdata->done. And then the worker lcores load "fdata->done" and
> >jump
> >out of the loop to stop running. Nothing should be stored after
> >updating
> >fdata->done, so the wmb is unnecessary.
> >
> >Fixes: 085edac2ca38 ("examples/eventdev_pipeline: support Tx
> >adapter")
> >Cc: pbhagavatula at marvell.com
> >Cc: stable at dpdk.org
> >
> >Suggested-by: Ruifeng Wang <ruifeng.wang at arm.com>
> >Signed-off-by: Feifei Wang <feifei.wang2 at arm.com>
> >Reviewed-by: Ruifeng Wang <ruifeng.wang at arm.com>
> >Reviewed-by: Honnappa Nagarahalli
> ><honnappa.nagarahalli at arm.com>
> >Acked-by: Harry van Haaren <harry.van.haaren at intel.com>
>
> Acked-by: Pavan Nikhilesh <pbhagavatula at marvell.com>


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




>
> >---
> > examples/eventdev_pipeline/main.c | 16 ++++------------
> > 1 file changed, 4 insertions(+), 12 deletions(-)
> >
> >diff --git a/examples/eventdev_pipeline/main.c
> >b/examples/eventdev_pipeline/main.c
> >index 3526d4d3d..4621e8a89 100644
> >--- a/examples/eventdev_pipeline/main.c
> >+++ b/examples/eventdev_pipeline/main.c
> >@@ -311,7 +311,6 @@ static void
> > signal_handler(int signum)
> > {
> >       static uint8_t once;
> >-      uint16_t portid;
> >
> >       if (fdata->done)
> >               rte_exit(1, "Exiting on signal %d\n", signum);
> >@@ -322,17 +321,6 @@ signal_handler(int signum)
> >                       rte_event_dev_dump(0, stdout);
> >               once = 1;
> >               fdata->done = 1;
> >-              rte_smp_wmb();
> >-
> >-              RTE_ETH_FOREACH_DEV(portid) {
> >-                      rte_event_eth_rx_adapter_stop(portid);
> >-                      rte_event_eth_tx_adapter_stop(portid);
> >-                      if (rte_eth_dev_stop(portid) < 0)
> >-                              printf("Failed to stop port %u", portid);
> >-              }
> >-
> >-              rte_eal_mp_wait_lcore();
> >-
> >       }
> >       if (signum == SIGTSTP)
> >               rte_event_dev_dump(0, stdout);
> >@@ -483,6 +471,10 @@ main(int argc, char **argv)
> >       }
> >
> >       RTE_ETH_FOREACH_DEV(portid) {
> >+              rte_event_eth_rx_adapter_stop(portid);
> >+              rte_event_eth_tx_adapter_stop(portid);
> >+              if (rte_eth_dev_stop(portid) < 0)
> >+                      printf("Failed to stop port %u", portid);
> >               rte_eth_dev_close(portid);
> >       }
> >
> >--
> >2.25.1
>


More information about the dev mailing list