During EAL cleanup stage, all bus devices are cleaned up properly. In the meantime, the ntb example app will also do the device cleanup process, which may call the dev ops '*dev->dev_ops->dev_close' twice.
If this dev ops for ntb was called twice, the interrupt handle for EAL will be disabled twice and will lead to error for the seconde time. Like this: "EAL: Error disabling MSI-X interrupts for fd xx" Thus, this patch added the check process for disabling interrupt in dev_close ops, to ensure that interrupt only be disabled once. Fixes: 1cab1a40ea9b ("bus: cleanup devices on shutdown") Cc: sta...@dpdk.org Signed-off-by: Junfeng Guo <junfeng....@intel.com> --- drivers/raw/ntb/ntb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index 76e98fe515..0ed4c14592 100644 --- a/drivers/raw/ntb/ntb.c +++ b/drivers/raw/ntb/ntb.c @@ -1045,6 +1045,11 @@ ntb_dev_close(struct rte_rawdev *dev) hw->queue_pairs = 0; intr_handle = hw->pci_dev->intr_handle; + /* Disable interrupt only once */ + if (!rte_intr_nb_efd_get(intr_handle) && + !rte_intr_max_intr_get(intr_handle)) + return 0; + /* Clean datapath event and vec mapping */ rte_intr_efd_disable(intr_handle); rte_intr_vec_list_free(intr_handle); -- 2.34.1