|
@@ -390,6 +390,8 @@ done:
|
|
|
ipath_enable_armlaunch(dd);
|
|
|
}
|
|
|
|
|
|
+static void cleanup_device(struct ipath_devdata *dd);
|
|
|
+
|
|
|
static int __devinit ipath_init_one(struct pci_dev *pdev,
|
|
|
const struct pci_device_id *ent)
|
|
|
{
|
|
@@ -616,8 +618,13 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
|
|
|
goto bail;
|
|
|
|
|
|
bail_irqsetup:
|
|
|
- if (pdev->irq)
|
|
|
- free_irq(pdev->irq, dd);
|
|
|
+ cleanup_device(dd);
|
|
|
+
|
|
|
+ if (dd->ipath_irq)
|
|
|
+ dd->ipath_f_free_irq(dd);
|
|
|
+
|
|
|
+ if (dd->ipath_f_cleanup)
|
|
|
+ dd->ipath_f_cleanup(dd);
|
|
|
|
|
|
bail_iounmap:
|
|
|
iounmap((volatile void __iomem *) dd->ipath_kregbase);
|
|
@@ -635,7 +642,7 @@ bail:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static void __devexit cleanup_device(struct ipath_devdata *dd)
|
|
|
+static void cleanup_device(struct ipath_devdata *dd)
|
|
|
{
|
|
|
int port;
|
|
|
struct ipath_portdata **tmp;
|