summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorPavan Nikhilesh <pbhagavatula@caviumnetworks.com>2018-07-24 17:44:50 +0530
committerJerin Jacob <jerin.jacob@caviumnetworks.com>2018-07-25 14:29:55 +0200
commit685bb5778f45004e507f93d2c570174b4135e8c0 (patch)
treee9671b767e0e58103ebf6215e45b9505c49db06c /app
parent56aa489e8ea48282f830b67f36772beaa478bade (diff)
downloaddpdk-685bb5778f45004e507f93d2c570174b4135e8c0.zip
dpdk-685bb5778f45004e507f93d2c570174b4135e8c0.tar.gz
dpdk-685bb5778f45004e507f93d2c570174b4135e8c0.tar.xz
app/eventdev: use proper teardown sequence
Use proper teardown sequence when SIGINT is caught to prevent eventdev from going into undefined state. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Diffstat (limited to 'app')
-rw-r--r--app/test-eventdev/evt_main.c42
-rw-r--r--app/test-eventdev/test_perf_common.c1
-rw-r--r--app/test-eventdev/test_pipeline_common.c1
3 files changed, 27 insertions, 17 deletions
diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c
index 57bb945..a8d304b 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 d0d835d..d33cb2c 100644
--- a/app/test-eventdev/test_perf_common.c
+++ b/app/test-eventdev/test_perf_common.c
@@ -750,7 +750,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 239c953..a54068d 100644
--- a/app/test-eventdev/test_pipeline_common.c
+++ b/app/test-eventdev/test_pipeline_common.c
@@ -477,7 +477,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);
}
}