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>
This commit is contained in:
Pavan Nikhilesh 2018-07-24 17:44:50 +05:30 committed by Jerin Jacob
parent 56aa489e8e
commit 685bb5778f
3 changed files with 27 additions and 17 deletions

View File

@ -20,29 +20,41 @@ struct evt_test *test;
static void static void
signal_handler(int signum) 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", printf("\nSignal %d received, preparing to exit...\n",
signum); signum);
if (test != NULL) {
/* request all lcores to exit from the main loop */ /* request all lcores to exit from the main loop */
*(int *)test->test_priv = true; *(int *)test->test_priv = true;
rte_wmb(); rte_wmb();
if (test->ops.ethdev_destroy)
test->ops.ethdev_destroy(test, &opt);
rte_eal_mp_wait_lcore(); rte_eal_mp_wait_lcore();
if (test->ops.test_result) if (test->ops.test_result)
test->ops.test_result(test, &opt); 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) if (test->ops.eventdev_destroy)
test->ops.eventdev_destroy(test, &opt); test->ops.eventdev_destroy(test, &opt);
if (test->ops.ethdev_destroy)
test->ops.ethdev_destroy(test, &opt);
if (test->ops.mempool_destroy) if (test->ops.mempool_destroy)
test->ops.mempool_destroy(test, &opt); test->ops.mempool_destroy(test, &opt);
if (test->ops.test_destroy) if (test->ops.test_destroy)
test->ops.test_destroy(test, &opt); test->ops.test_destroy(test, &opt);
}
/* exit with the expected status */ /* exit with the expected status */
signal(signum, SIG_DFL); signal(signum, SIG_DFL);

View File

@ -750,7 +750,6 @@ void perf_ethdev_destroy(struct evt_test *test, struct evt_options *opt)
RTE_ETH_FOREACH_DEV(i) { RTE_ETH_FOREACH_DEV(i) {
rte_event_eth_rx_adapter_stop(i); rte_event_eth_rx_adapter_stop(i);
rte_eth_dev_stop(i); rte_eth_dev_stop(i);
rte_eth_dev_close(i);
} }
} }
} }

View File

@ -477,7 +477,6 @@ pipeline_ethdev_destroy(struct evt_test *test, struct evt_options *opt)
RTE_ETH_FOREACH_DEV(i) { RTE_ETH_FOREACH_DEV(i) {
rte_event_eth_rx_adapter_stop(i); rte_event_eth_rx_adapter_stop(i);
rte_eth_dev_stop(i); rte_eth_dev_stop(i);
rte_eth_dev_close(i);
} }
} }