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
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.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);
rte_eal_mp_wait_lcore();
if (test->ops.ethdev_destroy)
test->ops.ethdev_destroy(test, &opt);
if (test->ops.test_result)
test->ops.test_result(test, &opt);
if (test->ops.mempool_destroy)
test->ops.mempool_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.test_destroy)
test->ops.test_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);
}
/* exit with the expected status */
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_event_eth_rx_adapter_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_event_eth_rx_adapter_stop(i);
rte_eth_dev_stop(i);
rte_eth_dev_close(i);
}
}