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

Reply via email to