net/ena: fix unhandled interrupt config failure
PATCH v3 5/7 net/ena: fix unhandled interrupt config failure
Fixed the device initialization routine to correctly handle failure during the registration or enabling of interrupts when operating in control path interrupt mode.
Fixes ca1dfa85f0d3 ("net/ena: add control path pure polling mode")
Signed-off-by Shai Brandes <[email protected]>
Reviewed-by Amit Bernstein <[email protected]>
Reviewed-by Yosef Raisman <[email protected]>
--- doc/guides/rel_notes/release_25_07.rst | 2 ++ drivers/net/ena/ena_ethdev.c | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-)
doc/guides/rel_notes/release_25_07.rst +2 -0
@@ -59,6 +59,8 @@ New Features * Added support for enabling fragment bypass mode for egress packets. This mode bypasses the PPS limit enforced by EC2 for fragmented egress packets on every ENI. + * Fixed the device initialization routine to correctly handle failure during the registration + or enabling of interrupts when operating in control path interrupt mode. * **Added Mucse rnp net driver.**
drivers/net/ena/ena_ethdev.c +18 -2
@@ -2465,8 +2465,16 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)if (!adapter->control_path_poll_interval) {/* Control path interrupt mode */ -rte_intr_callback_register (intr_handle, ena_control_path_handler, eth_dev); -rte_intr_enable (intr_handle); + rc =rte_intr_callback_register (intr_handle, ena_control_path_handler, eth_dev); +if (unlikely (rc <0 )) { +PMD_DRV_LOG_LINE (ERR ,"Failed to register control path interrupt" ); + goto err_stats_destroy; + } + rc =rte_intr_enable (intr_handle); +if (unlikely (rc <0 )) { +PMD_DRV_LOG_LINE (ERR ,"Failed to enable control path interrupt" ); + goto err_control_path_destroy; + }ena_com_set_admin_polling_mode (ena_dev, false); }else {/* Control path polling mode */
@@ -2485,6 +2493,14 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)return 0 ; err_control_path_destroy: +if (!adapter->control_path_poll_interval) { + rc =rte_intr_callback_unregister_sync (intr_handle, + ena_control_path_handler, + eth_dev); +if (unlikely (rc <0 )) +PMD_INIT_LOG_LINE (ERR ,"Failed to unregister interrupt handler" ); + } +err_stats_destroy:rte_free (adapter->drv_stats); err_indirect_table_destroy:ena_indirect_table_release (adapter);
Signature · 1 line
2.17.1