examples/l3fwd: add graceful teardown for eventdev

Add graceful teardown that addresses both event mode and poll mode.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>
This commit is contained in:
Pavan Nikhilesh 2020-01-28 11:05:04 +05:30 committed by Jerin Jacob
parent a434a02d5c
commit af76ee5043

View File

@ -1092,8 +1092,6 @@ l3fwd_poll_resource_setup(void)
ret, portid);
}
}
}
static inline int
@ -1191,7 +1189,7 @@ main(int argc, char **argv)
uint16_t queueid, portid;
unsigned int lcore_id;
uint8_t queue;
int ret;
int i, ret;
/* init EAL */
ret = rte_eal_init(argc, argv);
@ -1280,21 +1278,41 @@ main(int argc, char **argv)
ret = 0;
/* launch per-lcore init on every lcore */
rte_eal_mp_remote_launch(l3fwd_lkp.main_loop, NULL, CALL_MASTER);
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
if (rte_eal_wait_lcore(lcore_id) < 0) {
ret = -1;
break;
}
}
if (evt_rsrc->enabled) {
for (i = 0; i < evt_rsrc->rx_adptr.nb_rx_adptr; i++)
rte_event_eth_rx_adapter_stop(
evt_rsrc->rx_adptr.rx_adptr[i]);
for (i = 0; i < evt_rsrc->tx_adptr.nb_tx_adptr; i++)
rte_event_eth_tx_adapter_stop(
evt_rsrc->tx_adptr.tx_adptr[i]);
/* stop ports */
RTE_ETH_FOREACH_DEV(portid) {
if ((enabled_port_mask & (1 << portid)) == 0)
continue;
printf("Closing port %d...", portid);
rte_eth_dev_stop(portid);
rte_eth_dev_close(portid);
printf(" Done\n");
RTE_ETH_FOREACH_DEV(portid) {
if ((enabled_port_mask & (1 << portid)) == 0)
continue;
rte_eth_dev_stop(portid);
}
rte_eal_mp_wait_lcore();
RTE_ETH_FOREACH_DEV(portid) {
if ((enabled_port_mask & (1 << portid)) == 0)
continue;
rte_eth_dev_close(portid);
}
rte_event_dev_stop(evt_rsrc->event_d_id);
rte_event_dev_close(evt_rsrc->event_d_id);
} else {
rte_eal_mp_wait_lcore();
RTE_ETH_FOREACH_DEV(portid) {
if ((enabled_port_mask & (1 << portid)) == 0)
continue;
printf("Closing port %d...", portid);
rte_eth_dev_stop(portid);
rte_eth_dev_close(portid);
printf(" Done\n");
}
}
printf("Bye...\n");