Use synchronous callback unregister to ensure no callbacks
are running after interrupt uninstallation. This improves
stability and prevents potential use-after-free issues during
device teardown.

Signed-off-by: Rong Qian <[email protected]>
Signed-off-by: Renyong Wan <[email protected]>
---
 drivers/net/xsc/xsc_vfio.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/xsc/xsc_vfio.c b/drivers/net/xsc/xsc_vfio.c
index c233728c5f..cda21aa3f4 100644
--- a/drivers/net/xsc/xsc_vfio.c
+++ b/drivers/net/xsc/xsc_vfio.c
@@ -1113,11 +1113,11 @@ xsc_vfio_intr_handler_install(struct xsc_dev *xdev, 
rte_intr_callback_fn cb, voi
 static int
 xsc_vfio_intr_handler_uninstall(struct xsc_dev *xdev)
 {
-       if (rte_intr_fd_get(xdev->pci_dev->intr_handle) >= 0)
-               rte_intr_callback_unregister(xdev->pci_dev->intr_handle,
-                                            xdev->intr_cb, xdev->intr_cb_arg);
-
-       rte_intr_instance_free(xdev->intr_handle);
+       if (rte_intr_fd_get(xdev->pci_dev->intr_handle) >= 0) {
+               rte_intr_disable(xdev->pci_dev->intr_handle);
+               rte_intr_callback_unregister_sync(xdev->pci_dev->intr_handle,
+                                                 xdev->intr_cb, 
xdev->intr_cb_arg);
+       }
 
        return 0;
 }
-- 
2.25.1

Reply via email to