aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/core/ucm.c88
1 files changed, 41 insertions, 47 deletions
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
index 546ec61c407f..61d07c732f49 100644
--- a/drivers/infiniband/core/ucm.c
+++ b/drivers/infiniband/core/ucm.c
@@ -49,6 +49,11 @@ MODULE_AUTHOR("Libor Michalek");
49MODULE_DESCRIPTION("InfiniBand userspace Connection Manager access"); 49MODULE_DESCRIPTION("InfiniBand userspace Connection Manager access");
50MODULE_LICENSE("Dual BSD/GPL"); 50MODULE_LICENSE("Dual BSD/GPL");
51 51
52static int ucm_debug_level;
53
54module_param_named(debug_level, ucm_debug_level, int, 0644);
55MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0");
56
52enum { 57enum {
53 IB_UCM_MAJOR = 231, 58 IB_UCM_MAJOR = 231,
54 IB_UCM_MINOR = 255 59 IB_UCM_MINOR = 255
@@ -56,6 +61,14 @@ enum {
56 61
57#define IB_UCM_DEV MKDEV(IB_UCM_MAJOR, IB_UCM_MINOR) 62#define IB_UCM_DEV MKDEV(IB_UCM_MAJOR, IB_UCM_MINOR)
58 63
64#define PFX "UCM: "
65
66#define ucm_dbg(format, arg...) \
67 do { \
68 if (ucm_debug_level > 0) \
69 printk(KERN_DEBUG PFX format, ## arg); \
70 } while (0)
71
59static struct semaphore ctx_id_mutex; 72static struct semaphore ctx_id_mutex;
60static struct idr ctx_id_table; 73static struct idr ctx_id_table;
61static int ctx_id_rover = 0; 74static int ctx_id_rover = 0;
@@ -107,7 +120,7 @@ static void ib_ucm_ctx_put(struct ib_ucm_context *ctx)
107 120
108 up(&ctx->file->mutex); 121 up(&ctx->file->mutex);
109 122
110 printk(KERN_ERR "UCM: Destroyed CM ID <%d>\n", ctx->id); 123 ucm_dbg("Destroyed CM ID <%d>\n", ctx->id);
111 124
112 ib_destroy_cm_id(ctx->cm_id); 125 ib_destroy_cm_id(ctx->cm_id);
113 kfree(ctx); 126 kfree(ctx);
@@ -145,7 +158,7 @@ retry:
145 if (result) 158 if (result)
146 goto error; 159 goto error;
147 160
148 printk(KERN_ERR "UCM: Allocated CM ID <%d>\n", ctx->id); 161 ucm_dbg("Allocated CM ID <%d>\n", ctx->id);
149 162
150 return ctx; 163 return ctx;
151error: 164error:
@@ -378,10 +391,8 @@ static int ib_ucm_event_process(struct ib_cm_event *evt,
378 391
379 return 0; 392 return 0;
380error: 393error:
381 if (uvt->info) 394 kfree(uvt->info);
382 kfree(uvt->info); 395 kfree(uvt->data);
383 if (uvt->data)
384 kfree(uvt->data);
385 return result; 396 return result;
386} 397}
387 398
@@ -407,8 +418,7 @@ static int ib_ucm_event_handler(struct ib_cm_id *cm_id,
407 break; 418 break;
408 } 419 }
409 420
410 printk(KERN_ERR "UCM: Event. CM ID <%d> event <%d>\n", 421 ucm_dbg("Event. CM ID <%d> event <%d>\n", id, event->event);
411 id, event->event);
412 422
413 ctx = ib_ucm_ctx_get(id); 423 ctx = ib_ucm_ctx_get(id);
414 if (!ctx) 424 if (!ctx)
@@ -551,10 +561,8 @@ user:
551 list_del(&uevent->file_list); 561 list_del(&uevent->file_list);
552 list_del(&uevent->ctx_list); 562 list_del(&uevent->ctx_list);
553 563
554 if (uevent->data) 564 kfree(uevent->data);
555 kfree(uevent->data); 565 kfree(uevent->info);
556 if (uevent->info)
557 kfree(uevent->info);
558 kfree(uevent); 566 kfree(uevent);
559done: 567done:
560 up(&file->mutex); 568 up(&file->mutex);
@@ -846,12 +854,9 @@ static ssize_t ib_ucm_send_req(struct ib_ucm_file *file,
846 up(&ctx->file->mutex); 854 up(&ctx->file->mutex);
847 ib_ucm_ctx_put(ctx); /* func reference */ 855 ib_ucm_ctx_put(ctx); /* func reference */
848done: 856done:
849 if (param.private_data) 857 kfree(param.private_data);
850 kfree(param.private_data); 858 kfree(param.primary_path);
851 if (param.primary_path) 859 kfree(param.alternate_path);
852 kfree(param.primary_path);
853 if (param.alternate_path)
854 kfree(param.alternate_path);
855 860
856 return result; 861 return result;
857} 862}
@@ -900,8 +905,7 @@ static ssize_t ib_ucm_send_rep(struct ib_ucm_file *file,
900 up(&ctx->file->mutex); 905 up(&ctx->file->mutex);
901 ib_ucm_ctx_put(ctx); /* func reference */ 906 ib_ucm_ctx_put(ctx); /* func reference */
902done: 907done:
903 if (param.private_data) 908 kfree(param.private_data);
904 kfree(param.private_data);
905 909
906 return result; 910 return result;
907} 911}
@@ -939,8 +943,7 @@ static ssize_t ib_ucm_send_private_data(struct ib_ucm_file *file,
939 up(&ctx->file->mutex); 943 up(&ctx->file->mutex);
940 ib_ucm_ctx_put(ctx); /* func reference */ 944 ib_ucm_ctx_put(ctx); /* func reference */
941done: 945done:
942 if (private_data) 946 kfree(private_data);
943 kfree(private_data);
944 947
945 return result; 948 return result;
946} 949}
@@ -1009,10 +1012,8 @@ static ssize_t ib_ucm_send_info(struct ib_ucm_file *file,
1009 up(&ctx->file->mutex); 1012 up(&ctx->file->mutex);
1010 ib_ucm_ctx_put(ctx); /* func reference */ 1013 ib_ucm_ctx_put(ctx); /* func reference */
1011done: 1014done:
1012 if (data) 1015 kfree(data);
1013 kfree(data); 1016 kfree(info);
1014 if (info)
1015 kfree(info);
1016 1017
1017 return result; 1018 return result;
1018} 1019}
@@ -1063,8 +1064,7 @@ static ssize_t ib_ucm_send_mra(struct ib_ucm_file *file,
1063 up(&ctx->file->mutex); 1064 up(&ctx->file->mutex);
1064 ib_ucm_ctx_put(ctx); /* func reference */ 1065 ib_ucm_ctx_put(ctx); /* func reference */
1065done: 1066done:
1066 if (data) 1067 kfree(data);
1067 kfree(data);
1068 1068
1069 return result; 1069 return result;
1070} 1070}
@@ -1105,10 +1105,8 @@ static ssize_t ib_ucm_send_lap(struct ib_ucm_file *file,
1105 up(&ctx->file->mutex); 1105 up(&ctx->file->mutex);
1106 ib_ucm_ctx_put(ctx); /* func reference */ 1106 ib_ucm_ctx_put(ctx); /* func reference */
1107done: 1107done:
1108 if (data) 1108 kfree(data);
1109 kfree(data); 1109 kfree(path);
1110 if (path)
1111 kfree(path);
1112 1110
1113 return result; 1111 return result;
1114} 1112}
@@ -1157,10 +1155,8 @@ static ssize_t ib_ucm_send_sidr_req(struct ib_ucm_file *file,
1157 up(&ctx->file->mutex); 1155 up(&ctx->file->mutex);
1158 ib_ucm_ctx_put(ctx); /* func reference */ 1156 ib_ucm_ctx_put(ctx); /* func reference */
1159done: 1157done:
1160 if (param.private_data) 1158 kfree(param.private_data);
1161 kfree(param.private_data); 1159 kfree(param.path);
1162 if (param.path)
1163 kfree(param.path);
1164 1160
1165 return result; 1161 return result;
1166} 1162}
@@ -1209,10 +1205,8 @@ static ssize_t ib_ucm_send_sidr_rep(struct ib_ucm_file *file,
1209 up(&ctx->file->mutex); 1205 up(&ctx->file->mutex);
1210 ib_ucm_ctx_put(ctx); /* func reference */ 1206 ib_ucm_ctx_put(ctx); /* func reference */
1211done: 1207done:
1212 if (param.private_data) 1208 kfree(param.private_data);
1213 kfree(param.private_data); 1209 kfree(param.info);
1214 if (param.info)
1215 kfree(param.info);
1216 1210
1217 return result; 1211 return result;
1218} 1212}
@@ -1252,8 +1246,8 @@ static ssize_t ib_ucm_write(struct file *filp, const char __user *buf,
1252 if (copy_from_user(&hdr, buf, sizeof(hdr))) 1246 if (copy_from_user(&hdr, buf, sizeof(hdr)))
1253 return -EFAULT; 1247 return -EFAULT;
1254 1248
1255 printk(KERN_ERR "UCM: Write. cmd <%d> in <%d> out <%d> len <%Zu>\n", 1249 ucm_dbg("Write. cmd <%d> in <%d> out <%d> len <%Zu>\n",
1256 hdr.cmd, hdr.in, hdr.out, len); 1250 hdr.cmd, hdr.in, hdr.out, len);
1257 1251
1258 if (hdr.cmd < 0 || hdr.cmd >= ARRAY_SIZE(ucm_cmd_table)) 1252 if (hdr.cmd < 0 || hdr.cmd >= ARRAY_SIZE(ucm_cmd_table))
1259 return -EINVAL; 1253 return -EINVAL;
@@ -1300,7 +1294,7 @@ static int ib_ucm_open(struct inode *inode, struct file *filp)
1300 filp->private_data = file; 1294 filp->private_data = file;
1301 file->filp = filp; 1295 file->filp = filp;
1302 1296
1303 printk(KERN_ERR "UCM: Created struct\n"); 1297 ucm_dbg("Created struct\n");
1304 1298
1305 return 0; 1299 return 0;
1306} 1300}
@@ -1326,7 +1320,7 @@ static int ib_ucm_close(struct inode *inode, struct file *filp)
1326 1320
1327 kfree(file); 1321 kfree(file);
1328 1322
1329 printk(KERN_ERR "UCM: Deleted struct\n"); 1323 ucm_dbg("Deleted struct\n");
1330 return 0; 1324 return 0;
1331} 1325}
1332 1326
@@ -1348,7 +1342,7 @@ static int __init ib_ucm_init(void)
1348 1342
1349 result = register_chrdev_region(IB_UCM_DEV, 1, "infiniband_cm"); 1343 result = register_chrdev_region(IB_UCM_DEV, 1, "infiniband_cm");
1350 if (result) { 1344 if (result) {
1351 printk(KERN_ERR "UCM: Error <%d> registering dev\n", result); 1345 ucm_dbg("Error <%d> registering dev\n", result);
1352 goto err_chr; 1346 goto err_chr;
1353 } 1347 }
1354 1348
@@ -1356,14 +1350,14 @@ static int __init ib_ucm_init(void)
1356 1350
1357 result = cdev_add(&ib_ucm_cdev, IB_UCM_DEV, 1); 1351 result = cdev_add(&ib_ucm_cdev, IB_UCM_DEV, 1);
1358 if (result) { 1352 if (result) {
1359 printk(KERN_ERR "UCM: Error <%d> adding cdev\n", result); 1353 ucm_dbg("Error <%d> adding cdev\n", result);
1360 goto err_cdev; 1354 goto err_cdev;
1361 } 1355 }
1362 1356
1363 ib_ucm_class = class_create(THIS_MODULE, "infiniband_cm"); 1357 ib_ucm_class = class_create(THIS_MODULE, "infiniband_cm");
1364 if (IS_ERR(ib_ucm_class)) { 1358 if (IS_ERR(ib_ucm_class)) {
1365 result = PTR_ERR(ib_ucm_class); 1359 result = PTR_ERR(ib_ucm_class);
1366 printk(KERN_ERR "UCM: Error <%d> creating class\n", result); 1360 ucm_dbg("Error <%d> creating class\n", result);
1367 goto err_class; 1361 goto err_class;
1368 } 1362 }
1369 1363