aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/qib/qib_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
-rw-r--r--drivers/infiniband/hw/qib/qib_init.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
index ff36903474ea..fdae42973056 100644
--- a/drivers/infiniband/hw/qib/qib_init.c
+++ b/drivers/infiniband/hw/qib/qib_init.c
@@ -46,6 +46,10 @@
46#include "qib.h" 46#include "qib.h"
47#include "qib_common.h" 47#include "qib_common.h"
48#include "qib_mad.h" 48#include "qib_mad.h"
49#ifdef CONFIG_DEBUG_FS
50#include "qib_debugfs.h"
51#include "qib_verbs.h"
52#endif
49 53
50#undef pr_fmt 54#undef pr_fmt
51#define pr_fmt(fmt) QIB_DRV_NAME ": " fmt 55#define pr_fmt(fmt) QIB_DRV_NAME ": " fmt
@@ -188,7 +192,18 @@ struct qib_ctxtdata *qib_create_ctxtdata(struct qib_pportdata *ppd, u32 ctxt,
188 rcd->cnt = 1; 192 rcd->cnt = 1;
189 rcd->ctxt = ctxt; 193 rcd->ctxt = ctxt;
190 dd->rcd[ctxt] = rcd; 194 dd->rcd[ctxt] = rcd;
191 195#ifdef CONFIG_DEBUG_FS
196 if (ctxt < dd->first_user_ctxt) { /* N/A for PSM contexts */
197 rcd->opstats = kzalloc_node(sizeof(*rcd->opstats),
198 GFP_KERNEL, node_id);
199 if (!rcd->opstats) {
200 kfree(rcd);
201 qib_dev_err(dd,
202 "Unable to allocate per ctxt stats buffer\n");
203 return NULL;
204 }
205 }
206#endif
192 dd->f_init_ctxt(rcd); 207 dd->f_init_ctxt(rcd);
193 208
194 /* 209 /*
@@ -959,6 +974,10 @@ void qib_free_ctxtdata(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
959 vfree(rcd->subctxt_uregbase); 974 vfree(rcd->subctxt_uregbase);
960 vfree(rcd->subctxt_rcvegrbuf); 975 vfree(rcd->subctxt_rcvegrbuf);
961 vfree(rcd->subctxt_rcvhdr_base); 976 vfree(rcd->subctxt_rcvhdr_base);
977#ifdef CONFIG_DEBUG_FS
978 kfree(rcd->opstats);
979 rcd->opstats = NULL;
980#endif
962 kfree(rcd); 981 kfree(rcd);
963} 982}
964 983
@@ -1048,7 +1067,6 @@ done:
1048 dd->f_set_armlaunch(dd, 1); 1067 dd->f_set_armlaunch(dd, 1);
1049} 1068}
1050 1069
1051
1052void qib_free_devdata(struct qib_devdata *dd) 1070void qib_free_devdata(struct qib_devdata *dd)
1053{ 1071{
1054 unsigned long flags; 1072 unsigned long flags;
@@ -1058,6 +1076,9 @@ void qib_free_devdata(struct qib_devdata *dd)
1058 list_del(&dd->list); 1076 list_del(&dd->list);
1059 spin_unlock_irqrestore(&qib_devs_lock, flags); 1077 spin_unlock_irqrestore(&qib_devs_lock, flags);
1060 1078
1079#ifdef CONFIG_DEBUG_FS
1080 qib_dbg_ibdev_exit(&dd->verbs_dev);
1081#endif
1061 ib_dealloc_device(&dd->verbs_dev.ibdev); 1082 ib_dealloc_device(&dd->verbs_dev.ibdev);
1062} 1083}
1063 1084
@@ -1081,6 +1102,10 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)
1081 goto bail; 1102 goto bail;
1082 } 1103 }
1083 1104
1105#ifdef CONFIG_DEBUG_FS
1106 qib_dbg_ibdev_init(&dd->verbs_dev);
1107#endif
1108
1084 idr_preload(GFP_KERNEL); 1109 idr_preload(GFP_KERNEL);
1085 spin_lock_irqsave(&qib_devs_lock, flags); 1110 spin_lock_irqsave(&qib_devs_lock, flags);
1086 1111
@@ -1096,6 +1121,9 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)
1096 if (ret < 0) { 1121 if (ret < 0) {
1097 qib_early_err(&pdev->dev, 1122 qib_early_err(&pdev->dev,
1098 "Could not allocate unit ID: error %d\n", -ret); 1123 "Could not allocate unit ID: error %d\n", -ret);
1124#ifdef CONFIG_DEBUG_FS
1125 qib_dbg_ibdev_exit(&dd->verbs_dev);
1126#endif
1099 ib_dealloc_device(&dd->verbs_dev.ibdev); 1127 ib_dealloc_device(&dd->verbs_dev.ibdev);
1100 dd = ERR_PTR(ret); 1128 dd = ERR_PTR(ret);
1101 goto bail; 1129 goto bail;
@@ -1223,6 +1251,9 @@ static int __init qlogic_ib_init(void)
1223#ifdef CONFIG_INFINIBAND_QIB_DCA 1251#ifdef CONFIG_INFINIBAND_QIB_DCA
1224 dca_register_notify(&dca_notifier); 1252 dca_register_notify(&dca_notifier);
1225#endif 1253#endif
1254#ifdef CONFIG_DEBUG_FS
1255 qib_dbg_init();
1256#endif
1226 ret = pci_register_driver(&qib_driver); 1257 ret = pci_register_driver(&qib_driver);
1227 if (ret < 0) { 1258 if (ret < 0) {
1228 pr_err("Unable to register driver: error %d\n", -ret); 1259 pr_err("Unable to register driver: error %d\n", -ret);
@@ -1238,6 +1269,9 @@ bail_dev:
1238#ifdef CONFIG_INFINIBAND_QIB_DCA 1269#ifdef CONFIG_INFINIBAND_QIB_DCA
1239 dca_unregister_notify(&dca_notifier); 1270 dca_unregister_notify(&dca_notifier);
1240#endif 1271#endif
1272#ifdef CONFIG_DEBUG_FS
1273 qib_dbg_exit();
1274#endif
1241 idr_destroy(&qib_unit_table); 1275 idr_destroy(&qib_unit_table);
1242 qib_dev_cleanup(); 1276 qib_dev_cleanup();
1243bail: 1277bail:
@@ -1263,6 +1297,9 @@ static void __exit qlogic_ib_cleanup(void)
1263 dca_unregister_notify(&dca_notifier); 1297 dca_unregister_notify(&dca_notifier);
1264#endif 1298#endif
1265 pci_unregister_driver(&qib_driver); 1299 pci_unregister_driver(&qib_driver);
1300#ifdef CONFIG_DEBUG_FS
1301 qib_dbg_exit();
1302#endif
1266 1303
1267 qib_cpulist_count = 0; 1304 qib_cpulist_count = 0;
1268 kfree(qib_cpulist); 1305 kfree(qib_cpulist);