From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerin Jacob Subject: Re: [PATCH v4] app/eventdev: use proper teardown sequence Date: Wed, 25 Jul 2018 18:42:25 +0530 Message-ID: <20180725131224.GA3414@jerin> References: <20180717143307.5270-1-pbhagavatula@caviumnetworks.com> <20180724121450.9969-1-pbhagavatula@caviumnetworks.com> <20180724153950.GD11073@jerin> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org To: Pavan Nikhilesh Return-path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0066.outbound.protection.outlook.com [104.47.32.66]) by dpdk.org (Postfix) with ESMTP id F04101C01 for ; Wed, 25 Jul 2018 15:12:43 +0200 (CEST) Content-Disposition: inline In-Reply-To: <20180724153950.GD11073@jerin> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" -----Original Message----- > Date: Tue, 24 Jul 2018 21:09:50 +0530 > From: Jerin Jacob > To: Pavan Nikhilesh > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v4] app/eventdev: use proper teardown > sequence > User-Agent: Mutt/1.10.1 (2018-07-13) > > -----Original Message----- > > Date: Tue, 24 Jul 2018 17:44:50 +0530 > > From: Pavan Nikhilesh > > To: jerin.jacob@caviumnetworks.com > > Cc: dev@dpdk.org, Pavan Nikhilesh > > Subject: [dpdk-dev] [PATCH v4] app/eventdev: use proper teardown sequence > > X-Mailer: git-send-email 2.18.0 > > > > Use proper teardown sequence when SIGINT is caught to prevent > > eventdev from going into undefined state. > > > > Signed-off-by: Pavan Nikhilesh > > Acked-by: Jerin Jacob Applied to dpdk-next-eventdev/master. Thanks. > > > --- > > v4 Changes: > > - Check opts before closing ethdev. > > > > v3 Changes: > > - Segregate ethdev_stop and close to prevent possible SEGFAULT. > > - handle early shutdown. > > > > v2 Changes: > > - Only stopping the ethdev(producer) is sufficient.(Jerin) > > > > app/test-eventdev/evt_main.c | 42 +++++++++++++++--------- > > app/test-eventdev/test_perf_common.c | 1 - > > app/test-eventdev/test_pipeline_common.c | 1 - > > 3 files changed, 27 insertions(+), 17 deletions(-) > > > > diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c > > index 57bb94570..a8d304bab 100644 > > --- a/app/test-eventdev/evt_main.c > > +++ b/app/test-eventdev/evt_main.c > > @@ -20,29 +20,41 @@ struct evt_test *test; > > static void > > signal_handler(int signum) > > { > > - if (signum == SIGINT || signum == SIGTERM) { > > + int i; > > + static uint8_t once; > > + > > + if ((signum == SIGINT || signum == SIGTERM) && !once) { > > + once = true; > > printf("\nSignal %d received, preparing to exit...\n", > > signum); > > - /* request all lcores to exit from the main loop */ > > - *(int *)test->test_priv = true; > > - rte_wmb(); > > > > - rte_eal_mp_wait_lcore(); > > + if (test != NULL) { > > + /* 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.test_result) > > - test->ops.test_result(test, &opt); > > + rte_eal_mp_wait_lcore(); > > > > - if (test->ops.eventdev_destroy) > > - test->ops.eventdev_destroy(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 (opt.prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { > > + RTE_ETH_FOREACH_DEV(i) > > + rte_eth_dev_close(i); > > + } > > > > - if (test->ops.mempool_destroy) > > - test->ops.mempool_destroy(test, &opt); > > + if (test->ops.eventdev_destroy) > > + test->ops.eventdev_destroy(test, &opt); > > > > - if (test->ops.test_destroy) > > - test->ops.test_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); > > diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c > > index d00f91802..6d39f98e0 100644 > > --- a/app/test-eventdev/test_perf_common.c > > +++ b/app/test-eventdev/test_perf_common.c > > @@ -743,7 +743,6 @@ void perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > > RTE_ETH_FOREACH_DEV(i) { > > rte_event_eth_rx_adapter_stop(i); > > rte_eth_dev_stop(i); > > - rte_eth_dev_close(i); > > } > > } > > } > > diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c > > index 719518ff3..96e7c9882 100644 > > --- a/app/test-eventdev/test_pipeline_common.c > > +++ b/app/test-eventdev/test_pipeline_common.c > > @@ -467,7 +467,6 @@ pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt) > > RTE_ETH_FOREACH_DEV(i) { > > rte_event_eth_rx_adapter_stop(i); > > rte_eth_dev_stop(i); > > - rte_eth_dev_close(i); > > } > > } > > > > -- > > 2.18.0 > >