From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF252C433F5 for ; Mon, 16 May 2022 16:46:41 +0000 (UTC) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B81E240A7A; Mon, 16 May 2022 18:46:40 +0200 (CEST) Received: from mail-io1-f50.google.com (mail-io1-f50.google.com [209.85.166.50]) by mails.dpdk.org (Postfix) with ESMTP id 193774068B for ; Mon, 16 May 2022 18:46:39 +0200 (CEST) Received: by mail-io1-f50.google.com with SMTP id o190so16555298iof.10 for ; Mon, 16 May 2022 09:46:39 -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=GEurIEGzJ8tOaqXJnkd8/xcs9aZP3zIAmDdIae/0mVI=; b=TL4o/DFwUGgr2dh9UJ9w8e95lhueqeiqKxnJIkqcq58O+EDREnBecMsJzxPC18lXw4 M65ObgXG1iD649ExVLkeJPNSWTC2Cl6ABm5t5FtrBNHzURFd3yQ58ExzycJOBExrp+9o ynBbN2eWWpuj51ZHw/rSlxztJoUzdfgOdriHoEUSlb+4K98GHJ3C1rmLHX5lEHZttanb uH7skFYvAp81dnWW1kuzV0NKNE3vrssZ25YsUemUNzOY4s5C7Qkfs8jwOH/l3WNwb4Ss ULtfG/8MHfg6tqds+MEeoyKke7mt4CkDz3v4mGorz8nebgdd9pUun6IshQTiInnlrGVz mHmQ== 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=GEurIEGzJ8tOaqXJnkd8/xcs9aZP3zIAmDdIae/0mVI=; b=LDOe7tipkQgujHqExqoAosF8r8mxdbYQpmJHUbEOglJkw5ApeL+QYGm53FR78MLX/V RE3FxDyZSFNPeIe2cg5L1qe3DN/t7byDw9f3OU5usVvBCW4SV8i6NqdWhgTs1SokV/VO 3fo4dgX6r3CFph7wwzIcy0cucU21rK/Vb2VZ9HIA5X+PsPwuM4nevCmZa8c+9SMbI/AD 7Iv8wV2tlTRN7AmUBxeiC/I1jiH9EVSPXz2b+epouILIqBokl6DGqYGhafUifzeCW0I6 mFotspHU4D/wJR2zVy7/q19K4S3vKUidNSmJkZcAZcHaJSRvLxqxK1Iba8u2uMrEuaoE yTFg== X-Gm-Message-State: AOAM531+xzA7rc63YhL8mVX64y81KeI3ELfyMgblmPJKTmdIesP0jHqt zxXjqKbTjhyST9f8InJtOvHdqufo9o/G41Xmt6A= X-Google-Smtp-Source: ABdhPJysmNMFtWMeMZqnBkAT3/I4dm/qri4I2QilDuloTPLz3Bfj6+GXvlvc/zezl7Luh3E3dk4ymSEtq82u16H3eQE= X-Received: by 2002:a05:6638:448a:b0:32e:1a0d:f06b with SMTP id bv10-20020a056638448a00b0032e1a0df06bmr5061055jab.280.1652719598284; Mon, 16 May 2022 09:46:38 -0700 (PDT) MIME-Version: 1.0 References: <20220426211412.6138-1-pbhagavatula@marvell.com> <20220513160719.10558-1-pbhagavatula@marvell.com> In-Reply-To: <20220513160719.10558-1-pbhagavatula@marvell.com> From: Jerin Jacob Date: Mon, 16 May 2022 22:16:12 +0530 Message-ID: Subject: Re: [PATCH v2 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 Fri, May 13, 2022 at 9:37 PM wrote: > > From: Pavan Nikhilesh > > Remove rte_*_dev calls from signal handler callback as signal handlers > are supposed to be light weight. > > 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. > > Verified SW event device on ARM64 using the following command: > > ./build/app/dpdk-test-eventdev -l 7-23 -s 0xf00 --vdev=event_sw0 > -a 0002:02:00.0 -- --prod_type_ethdev --nb_pkts=0 --verbose 2 > --test=pipeline_queue --stlist=o --wlcores 16-23 Series Acked-by: Jerin Jacob Series applied to dpdk-next-net-eventdev/for-main. Thanks > > 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..4cf16b4267 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..29b64014d7 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 >