IB/ipath: Unregister from IB core early
authorBryan O'Sullivan <bos@pathscale.com>
Thu, 28 Sep 2006 16:00:01 +0000 (09:00 -0700)
committerRoland Dreier <rolandd@cisco.com>
Thu, 28 Sep 2006 18:16:29 +0000 (11:16 -0700)
This gives upper-level protocols a chance to unregister while the device
is still usable.

Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/ipath/ipath_driver.c

index 0fe37c5..a260acf 100644 (file)
@@ -536,7 +536,12 @@ static void __devexit ipath_remove_one(struct pci_dev *pdev)
                return;
 
        dd = pci_get_drvdata(pdev);
-       ipath_unregister_ib_device(dd->verbs_dev);
+
+       if (dd->verbs_dev) {
+               ipath_unregister_ib_device(dd->verbs_dev);
+               dd->verbs_dev = NULL;
+       }
+
        ipath_diag_remove(dd);
        ipath_user_remove(dd);
        ipathfs_remove_device(dd);
@@ -2027,6 +2032,11 @@ static void __exit infinipath_cleanup(void)
        list_for_each_entry_safe(dd, tmp, &ipath_dev_list, ipath_list) {
                spin_unlock_irqrestore(&ipath_devs_lock, flags);
 
+               if (dd->verbs_dev) {
+                       ipath_unregister_ib_device(dd->verbs_dev);
+                       dd->verbs_dev = NULL;
+               }
+
                if (dd->ipath_kregbase)
                        cleanup_device(dd);