From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5846EA00C3; Fri, 13 May 2022 15:39:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0153940DF7; Fri, 13 May 2022 15:39:39 +0200 (CEST) Received: from mail-io1-f46.google.com (mail-io1-f46.google.com [209.85.166.46]) by mails.dpdk.org (Postfix) with ESMTP id C135440DDE for ; Fri, 13 May 2022 15:39:37 +0200 (CEST) Received: by mail-io1-f46.google.com with SMTP id e194so8652481iof.11 for ; Fri, 13 May 2022 06:39:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=crLhyQsu8jRsfzICGruq5IOB6tUIYZYVS+2P9qmfV70=; b=MaxfhG8zFjRftNXuaFDU6ZWKXrGXME6fn3oVXYm+CReKsRFMvZlcFPud4EqHZdw5ck 5a/iuRtIKeosnzeZwes21ah3i1jZzq5KeiO+qbKBPlGUQAVaBp0zEpAgh9ekS4Z69tpk VLNPb/yaRwhBvnJkG6ASYJBnwBmH6CRMMM1mdmMmAwbnWJt10VuoXwiBfADKGPSvBfwC 7L8EOU7HaC4TRtXo653QMPNlIFDhoc2qFjIqkiYmHZqCo3MtfYJ2dPoAB17q8x9t5Ipc CJSNJQQbCvSXF05XLwy+lekaUvr+kwOMm5v5KjAxRhLCVM43cmFt5YbGB32kVeffC2Ak dflg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=crLhyQsu8jRsfzICGruq5IOB6tUIYZYVS+2P9qmfV70=; b=dcAogr4TtIvRcADrO0TS5AN5/DuJrih3Yk5H2K3SK15oDAZ7lPvWhEMM/CxmVF32M2 XAiDfxy7doX617HbBGJMSmytvqH7sQHZ4607cQp35IP540QUGnj1xyXSWqfGObd0s8Yn pVbaLb2fgVuTGQGa2/foBKix0+rQIi/Hu7BZ+eXTprwsuH6zNtcnYGP3q2/oBmpfZ/zT 5av17NId6XgRUAiEkQPftSCVc6OKnr3NAkXDQiaximJ3NThJA8oewV9ALkUJw+y7Nyab X8jODdQ8fa3I0BXYwBmUAaDioPA2hnTuxXXoXtc+YLCT/IepQETn1EqqwAv9O4I97JaF rRUA== X-Gm-Message-State: AOAM533ox55Xg0+LcOJDHOiwJJ7QPMg6xJ2iJGiSi25RuoHelQmvJvLN N2MkXdXpgWdrtnMHYwLQvNc81MSXdbQB9dxNKcw= X-Google-Smtp-Source: ABdhPJwCm8o9cj9PB7wl3u2nZ0TMZug+s2sWWwwA8aHh1KhNkE4tJTvxT+moNcRfr0z5twBgpDg7S956CNeNFOX32WQ= X-Received: by 2002:a02:9483:0:b0:32b:1d:5d52 with SMTP id x3-20020a029483000000b0032b001d5d52mr2531932jah.158.1652449175538; Fri, 13 May 2022 06:39:35 -0700 (PDT) MIME-Version: 1.0 References: <20220426211412.6138-1-pbhagavatula@marvell.com> In-Reply-To: <20220426211412.6138-1-pbhagavatula@marvell.com> From: Jerin Jacob Date: Fri, 13 May 2022 19:09:09 +0530 Message-ID: Subject: Re: [PATCH 1/6] app/eventdev: simplify signal handling and teardown To: Pavan Nikhilesh Cc: Jerin Jacob , dpdk-dev Content-Type: text/plain; charset="UTF-8" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Wed, Apr 27, 2022 at 2:44 AM Pavan Nikhilesh wrote: > > Remove rte_*_dev calls from signal handler callback. Pease adds the reason. > Split ethernet device teardown into Rx and Tx sections, wait for > workers to finish processing after disabling Rx to allow workers > to complete processing currently held packets. > > Signed-off-by: Pavan Nikhilesh > --- > app/test-eventdev/evt_main.c | 58 +++++++++--------------- > app/test-eventdev/evt_test.h | 3 ++ > app/test-eventdev/test_perf_atq.c | 1 + > app/test-eventdev/test_perf_common.c | 20 +++++++- > app/test-eventdev/test_perf_common.h | 4 +- > app/test-eventdev/test_perf_queue.c | 1 + > app/test-eventdev/test_pipeline_atq.c | 1 + > app/test-eventdev/test_pipeline_common.c | 19 +++++++- > app/test-eventdev/test_pipeline_common.h | 5 +- > app/test-eventdev/test_pipeline_queue.c | 1 + > 10 files changed, 72 insertions(+), 41 deletions(-) > > diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c > index a7d6b0c1cf..c5d63061bf 100644 > --- a/app/test-eventdev/evt_main.c > +++ b/app/test-eventdev/evt_main.c > @@ -19,11 +19,7 @@ struct evt_test *test; > static void > signal_handler(int signum) > { > - int i; > - static uint8_t once; > - > - if ((signum == SIGINT || signum == SIGTERM) && !once) { > - once = true; > + if (signum == SIGINT || signum == SIGTERM) { > printf("\nSignal %d received, preparing to exit...\n", > signum); > > @@ -31,36 +27,7 @@ signal_handler(int signum) > /* request all lcores to exit from the main loop */ > *(int *)test->test_priv = true; > rte_wmb(); > - > - if (test->ops.ethdev_destroy) > - test->ops.ethdev_destroy(test, &opt); > - > - if (test->ops.cryptodev_destroy) > - test->ops.cryptodev_destroy(test, &opt); > - > - rte_eal_mp_wait_lcore(); > - > - if (test->ops.test_result) > - test->ops.test_result(test, &opt); > - > - if (opt.prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { > - RTE_ETH_FOREACH_DEV(i) > - rte_eth_dev_close(i); > - } > - > - if (test->ops.eventdev_destroy) > - test->ops.eventdev_destroy(test, &opt); > - > - if (test->ops.mempool_destroy) > - test->ops.mempool_destroy(test, &opt); > - > - if (test->ops.test_destroy) > - test->ops.test_destroy(test, &opt); > } > - > - /* exit with the expected status */ > - signal(signum, SIG_DFL); > - kill(getpid(), signum); > } > } > > @@ -189,10 +156,29 @@ main(int argc, char **argv) > } > } > > + if (test->ops.ethdev_rx_stop) > + test->ops.ethdev_rx_stop(test, &opt); > + > + if (test->ops.cryptodev_destroy) > + test->ops.cryptodev_destroy(test, &opt); > + > rte_eal_mp_wait_lcore(); > > - /* Print the test result */ > - ret = test->ops.test_result(test, &opt); > + if (test->ops.test_result) > + test->ops.test_result(test, &opt); > + > + if (test->ops.ethdev_destroy) > + test->ops.ethdev_destroy(test, &opt); > + > + if (test->ops.eventdev_destroy) > + test->ops.eventdev_destroy(test, &opt); > + > + if (test->ops.mempool_destroy) > + test->ops.mempool_destroy(test, &opt); > + > + if (test->ops.test_destroy) > + test->ops.test_destroy(test, &opt); > + > nocap: > if (ret == EVT_TEST_SUCCESS) { > printf("Result: "CLGRN"%s"CLNRM"\n", "Success"); > diff --git a/app/test-eventdev/evt_test.h b/app/test-eventdev/evt_test.h > index 50fa474ec2..1049f99ddc 100644 > --- a/app/test-eventdev/evt_test.h > +++ b/app/test-eventdev/evt_test.h > @@ -41,6 +41,8 @@ typedef void (*evt_test_eventdev_destroy_t) > (struct evt_test *test, struct evt_options *opt); > typedef void (*evt_test_ethdev_destroy_t) > (struct evt_test *test, struct evt_options *opt); > +typedef void (*evt_test_ethdev_rx_stop_t)(struct evt_test *test, > + struct evt_options *opt); > typedef void (*evt_test_cryptodev_destroy_t) > (struct evt_test *test, struct evt_options *opt); > typedef void (*evt_test_mempool_destroy_t) > @@ -60,6 +62,7 @@ struct evt_test_ops { > evt_test_launch_lcores_t launch_lcores; > evt_test_result_t test_result; > evt_test_eventdev_destroy_t eventdev_destroy; > + evt_test_ethdev_rx_stop_t ethdev_rx_stop; > evt_test_ethdev_destroy_t ethdev_destroy; > evt_test_cryptodev_destroy_t cryptodev_destroy; > evt_test_mempool_destroy_t mempool_destroy; > diff --git a/app/test-eventdev/test_perf_atq.c b/app/test-eventdev/test_perf_atq.c > index 67ff681666..bac3ea602f 100644 > --- a/app/test-eventdev/test_perf_atq.c > +++ b/app/test-eventdev/test_perf_atq.c > @@ -343,6 +343,7 @@ static const struct evt_test_ops perf_atq = { > .test_setup = perf_test_setup, > .ethdev_setup = perf_ethdev_setup, > .cryptodev_setup = perf_cryptodev_setup, > + .ethdev_rx_stop = perf_ethdev_rx_stop, > .mempool_setup = perf_mempool_setup, > .eventdev_setup = perf_atq_eventdev_setup, > .launch_lcores = perf_atq_launch_lcores, > diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c > index 9d1f4a4567..e93b0e7272 100644 > --- a/app/test-eventdev/test_perf_common.c > +++ b/app/test-eventdev/test_perf_common.c > @@ -1087,7 +1087,8 @@ perf_ethdev_setup(struct evt_test *test, struct evt_options *opt) > return 0; > } > > -void perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > +void > +perf_ethdev_rx_stop(struct evt_test *test, struct evt_options *opt) > { > uint16_t i; > RTE_SET_USED(test); > @@ -1095,6 +1096,23 @@ void perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > if (opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { > RTE_ETH_FOREACH_DEV(i) { > rte_event_eth_rx_adapter_stop(i); > + rte_event_eth_rx_adapter_queue_del(i, i, -1); > + rte_eth_dev_rx_queue_stop(i, 0); > + } > + } > +} > + > +void > +perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > +{ > + uint16_t i; > + RTE_SET_USED(test); > + > + if (opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { > + RTE_ETH_FOREACH_DEV (i) { > + rte_event_eth_tx_adapter_stop(i); > + rte_event_eth_tx_adapter_queue_del(i, i, -1); > + rte_eth_dev_tx_queue_stop(i, 0); > rte_eth_dev_stop(i); > } > } > diff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h > index ea0907d61a..e504bb1df9 100644 > --- a/app/test-eventdev/test_perf_common.h > +++ b/app/test-eventdev/test_perf_common.h > @@ -12,10 +12,11 @@ > #include > #include > #include > -#include > #include > #include > +#include > #include > +#include > #include > #include > #include > @@ -181,6 +182,7 @@ void perf_test_destroy(struct evt_test *test, struct evt_options *opt); > void perf_eventdev_destroy(struct evt_test *test, struct evt_options *opt); > void perf_cryptodev_destroy(struct evt_test *test, struct evt_options *opt); > void perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt); > +void perf_ethdev_rx_stop(struct evt_test *test, struct evt_options *opt); > void perf_mempool_destroy(struct evt_test *test, struct evt_options *opt); > > #endif /* _TEST_PERF_COMMON_ */ > diff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c > index dcf6d82947..108f1742a7 100644 > --- a/app/test-eventdev/test_perf_queue.c > +++ b/app/test-eventdev/test_perf_queue.c > @@ -360,6 +360,7 @@ static const struct evt_test_ops perf_queue = { > .mempool_setup = perf_mempool_setup, > .ethdev_setup = perf_ethdev_setup, > .cryptodev_setup = perf_cryptodev_setup, > + .ethdev_rx_stop = perf_ethdev_rx_stop, > .eventdev_setup = perf_queue_eventdev_setup, > .launch_lcores = perf_queue_launch_lcores, > .eventdev_destroy = perf_eventdev_destroy, > diff --git a/app/test-eventdev/test_pipeline_atq.c b/app/test-eventdev/test_pipeline_atq.c > index 84dd4f44e3..79218502ba 100644 > --- a/app/test-eventdev/test_pipeline_atq.c > +++ b/app/test-eventdev/test_pipeline_atq.c > @@ -772,6 +772,7 @@ static const struct evt_test_ops pipeline_atq = { > .ethdev_setup = pipeline_ethdev_setup, > .eventdev_setup = pipeline_atq_eventdev_setup, > .launch_lcores = pipeline_atq_launch_lcores, > + .ethdev_rx_stop = pipeline_ethdev_rx_stop, > .eventdev_destroy = pipeline_eventdev_destroy, > .mempool_destroy = pipeline_mempool_destroy, > .ethdev_destroy = pipeline_ethdev_destroy, > diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c > index ddaa9f3fdb..d994c91678 100644 > --- a/app/test-eventdev/test_pipeline_common.c > +++ b/app/test-eventdev/test_pipeline_common.c > @@ -505,6 +505,22 @@ pipeline_event_tx_adapter_setup(struct evt_options *opt, > return ret; > } > > +void > +pipeline_ethdev_rx_stop(struct evt_test *test, struct evt_options *opt) > +{ > + uint16_t i, j; > + RTE_SET_USED(test); > + > + if (opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { > + RTE_ETH_FOREACH_DEV (i) { > + rte_event_eth_rx_adapter_stop(i); > + rte_event_eth_rx_adapter_queue_del(i, i, -1); > + for (j = 0; j < opt->eth_queues; j++) > + rte_eth_dev_rx_queue_stop(i, j); > + } > + } > +} > + > void > pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > { > @@ -513,8 +529,9 @@ pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > RTE_SET_USED(opt); > > RTE_ETH_FOREACH_DEV(i) { > - rte_event_eth_rx_adapter_stop(i); > rte_event_eth_tx_adapter_stop(i); > + rte_event_eth_tx_adapter_queue_del(i, i, -1); > + rte_eth_dev_tx_queue_stop(i, 0); > rte_eth_dev_stop(i); > } > } > diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h > index d69e2f8a3e..c979c33772 100644 > --- a/app/test-eventdev/test_pipeline_common.h > +++ b/app/test-eventdev/test_pipeline_common.h > @@ -12,16 +12,16 @@ > > #include > #include > -#include > #include > #include > +#include > #include > #include > #include > #include > -#include > #include > #include > +#include > > #include "evt_common.h" > #include "evt_options.h" > @@ -186,6 +186,7 @@ void pipeline_opt_dump(struct evt_options *opt, uint8_t nb_queues); > void pipeline_test_destroy(struct evt_test *test, struct evt_options *opt); > void pipeline_eventdev_destroy(struct evt_test *test, struct evt_options *opt); > void pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt); > +void pipeline_ethdev_rx_stop(struct evt_test *test, struct evt_options *opt); > void pipeline_mempool_destroy(struct evt_test *test, struct evt_options *opt); > > #endif /* _TEST_PIPELINE_COMMON_ */ > diff --git a/app/test-eventdev/test_pipeline_queue.c b/app/test-eventdev/test_pipeline_queue.c > index f6cc3e358e..343f8f3b1d 100644 > --- a/app/test-eventdev/test_pipeline_queue.c > +++ b/app/test-eventdev/test_pipeline_queue.c > @@ -798,6 +798,7 @@ static const struct evt_test_ops pipeline_queue = { > .ethdev_setup = pipeline_ethdev_setup, > .eventdev_setup = pipeline_queue_eventdev_setup, > .launch_lcores = pipeline_queue_launch_lcores, > + .ethdev_rx_stop = pipeline_ethdev_rx_stop, > .eventdev_destroy = pipeline_eventdev_destroy, > .mempool_destroy = pipeline_mempool_destroy, > .ethdev_destroy = pipeline_ethdev_destroy, > -- > 2.25.1 >