diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
-rw-r--r-- | drivers/infiniband/hw/qib/qib_init.c | 41 |
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 | |||
1052 | void qib_free_devdata(struct qib_devdata *dd) | 1070 | void 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(); |
1243 | bail: | 1277 | bail: |
@@ -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); |