When registering interrupts, there was no check if the registration of the interrupt succeeded. Add in such a check, and go to fallback path if the check fails. This prevents errors on FreeBSD due to missed admin queue messages.
Fixes: cd3b124955d4 ("net/iavf: enable interrupt polling") Cc: sta...@dpdk.org Signed-off-by: Bruce Richardson <bruce.richard...@intel.com> --- drivers/net/intel/iavf/iavf_ethdev.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c index 9cd2b0c867..1ab84b0bfc 100644 --- a/drivers/net/intel/iavf/iavf_ethdev.c +++ b/drivers/net/intel/iavf/iavf_ethdev.c @@ -2825,18 +2825,16 @@ iavf_dev_init(struct rte_eth_dev *eth_dev) ð_dev->data->mac_addrs[0]); - if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) { - /* register callback func to eal lib */ - rte_intr_callback_register(pci_dev->intr_handle, - iavf_dev_interrupt_handler, - (void *)eth_dev); + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR && + /* register callback func to eal lib */ + rte_intr_callback_register(pci_dev->intr_handle, + iavf_dev_interrupt_handler, (void *)eth_dev) == 0) /* enable uio intr after callback register */ rte_intr_enable(pci_dev->intr_handle); - } else { + else rte_eal_alarm_set(IAVF_ALARM_INTERVAL, iavf_dev_alarm_handler, eth_dev); - } /* configure and enable device interrupt */ iavf_enable_irq0(hw); -- 2.43.0