|
@@ -1097,14 +1097,10 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)
|
|
|
int ret;
|
|
|
|
|
|
dd = (struct qib_devdata *) ib_alloc_device(sizeof(*dd) + extra);
|
|
|
- if (!dd) {
|
|
|
- dd = ERR_PTR(-ENOMEM);
|
|
|
- goto bail;
|
|
|
- }
|
|
|
+ if (!dd)
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
|
|
|
-#ifdef CONFIG_DEBUG_FS
|
|
|
- qib_dbg_ibdev_init(&dd->verbs_dev);
|
|
|
-#endif
|
|
|
+ INIT_LIST_HEAD(&dd->list);
|
|
|
|
|
|
idr_preload(GFP_KERNEL);
|
|
|
spin_lock_irqsave(&qib_devs_lock, flags);
|
|
@@ -1121,11 +1117,6 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)
|
|
|
if (ret < 0) {
|
|
|
qib_early_err(&pdev->dev,
|
|
|
"Could not allocate unit ID: error %d\n", -ret);
|
|
|
-#ifdef CONFIG_DEBUG_FS
|
|
|
- qib_dbg_ibdev_exit(&dd->verbs_dev);
|
|
|
-#endif
|
|
|
- ib_dealloc_device(&dd->verbs_dev.ibdev);
|
|
|
- dd = ERR_PTR(ret);
|
|
|
goto bail;
|
|
|
}
|
|
|
|
|
@@ -1139,9 +1130,15 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)
|
|
|
qib_early_err(&pdev->dev,
|
|
|
"Could not alloc cpulist info, cpu affinity might be wrong\n");
|
|
|
}
|
|
|
-
|
|
|
-bail:
|
|
|
+#ifdef CONFIG_DEBUG_FS
|
|
|
+ qib_dbg_ibdev_init(&dd->verbs_dev);
|
|
|
+#endif
|
|
|
return dd;
|
|
|
+bail:
|
|
|
+ if (!list_empty(&dd->list))
|
|
|
+ list_del_init(&dd->list);
|
|
|
+ ib_dealloc_device(&dd->verbs_dev.ibdev);
|
|
|
+ return ERR_PTR(ret);;
|
|
|
}
|
|
|
|
|
|
/*
|