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:
parent
56aa489e8e
commit
685bb5778f
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user