From: Bryan O'Sullivan Date: Thu, 28 Sep 2006 16:00:01 +0000 (-0700) Subject: IB/ipath: Unregister from IB core early X-Git-Tag: v2.6.19-rc1~652^2~22 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=c78f6415e964aafd3a91d834970c16b613e421d9;p=linux-2.6-omap-h63xx.git IB/ipath: Unregister from IB core early This gives upper-level protocols a chance to unregister while the device is still usable. Signed-off-by: Bryan O'Sullivan Signed-off-by: Roland Dreier --- diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index 0fe37c5467a..a260acf4a9e 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c @@ -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);