MODULE_DESCRIPTION("InfiniBand userspace Connection Manager access");
MODULE_LICENSE("Dual BSD/GPL");
+static int ucm_debug_level;
+
+module_param_named(debug_level, ucm_debug_level, int, 0644);
+MODULE_PARM_DESC(debug_level, "Enable debug tracing if > 0");
+
enum {
IB_UCM_MAJOR = 231,
IB_UCM_MINOR = 255
#define IB_UCM_DEV MKDEV(IB_UCM_MAJOR, IB_UCM_MINOR)
+#define PFX "UCM: "
+
+#define ucm_dbg(format, arg...) \
+ do { \
+ if (ucm_debug_level > 0) \
+ printk(KERN_DEBUG PFX format, ## arg); \
+ } while (0)
+
static struct semaphore ctx_id_mutex;
static struct idr ctx_id_table;
static int ctx_id_rover = 0;
up(&ctx->file->mutex);
- printk(KERN_ERR "UCM: Destroyed CM ID <%d>\n", ctx->id);
+ ucm_dbg("Destroyed CM ID <%d>\n", ctx->id);
ib_destroy_cm_id(ctx->cm_id);
kfree(ctx);
if (result)
goto error;
- printk(KERN_ERR "UCM: Allocated CM ID <%d>\n", ctx->id);
+ ucm_dbg("Allocated CM ID <%d>\n", ctx->id);
return ctx;
error:
return 0;
error:
- if (uvt->info)
- kfree(uvt->info);
- if (uvt->data)
- kfree(uvt->data);
+ kfree(uvt->info);
+ kfree(uvt->data);
return result;
}
break;
}
- printk(KERN_ERR "UCM: Event. CM ID <%d> event <%d>\n",
- id, event->event);
+ ucm_dbg("Event. CM ID <%d> event <%d>\n", id, event->event);
ctx = ib_ucm_ctx_get(id);
if (!ctx)
list_del(&uevent->file_list);
list_del(&uevent->ctx_list);
- if (uevent->data)
- kfree(uevent->data);
- if (uevent->info)
- kfree(uevent->info);
+ kfree(uevent->data);
+ kfree(uevent->info);
kfree(uevent);
done:
up(&file->mutex);
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (param.private_data)
- kfree(param.private_data);
- if (param.primary_path)
- kfree(param.primary_path);
- if (param.alternate_path)
- kfree(param.alternate_path);
+ kfree(param.private_data);
+ kfree(param.primary_path);
+ kfree(param.alternate_path);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (param.private_data)
- kfree(param.private_data);
+ kfree(param.private_data);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (private_data)
- kfree(private_data);
+ kfree(private_data);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (data)
- kfree(data);
- if (info)
- kfree(info);
+ kfree(data);
+ kfree(info);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (data)
- kfree(data);
+ kfree(data);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (data)
- kfree(data);
- if (path)
- kfree(path);
+ kfree(data);
+ kfree(path);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (param.private_data)
- kfree(param.private_data);
- if (param.path)
- kfree(param.path);
+ kfree(param.private_data);
+ kfree(param.path);
return result;
}
up(&ctx->file->mutex);
ib_ucm_ctx_put(ctx); /* func reference */
done:
- if (param.private_data)
- kfree(param.private_data);
- if (param.info)
- kfree(param.info);
+ kfree(param.private_data);
+ kfree(param.info);
return result;
}
if (copy_from_user(&hdr, buf, sizeof(hdr)))
return -EFAULT;
- printk(KERN_ERR "UCM: Write. cmd <%d> in <%d> out <%d> len <%Zu>\n",
- hdr.cmd, hdr.in, hdr.out, len);
+ ucm_dbg("Write. cmd <%d> in <%d> out <%d> len <%Zu>\n",
+ hdr.cmd, hdr.in, hdr.out, len);
if (hdr.cmd < 0 || hdr.cmd >= ARRAY_SIZE(ucm_cmd_table))
return -EINVAL;
filp->private_data = file;
file->filp = filp;
- printk(KERN_ERR "UCM: Created struct\n");
+ ucm_dbg("Created struct\n");
return 0;
}
kfree(file);
- printk(KERN_ERR "UCM: Deleted struct\n");
+ ucm_dbg("Deleted struct\n");
return 0;
}
result = register_chrdev_region(IB_UCM_DEV, 1, "infiniband_cm");
if (result) {
- printk(KERN_ERR "UCM: Error <%d> registering dev\n", result);
+ ucm_dbg("Error <%d> registering dev\n", result);
goto err_chr;
}
result = cdev_add(&ib_ucm_cdev, IB_UCM_DEV, 1);
if (result) {
- printk(KERN_ERR "UCM: Error <%d> adding cdev\n", result);
+ ucm_dbg("Error <%d> adding cdev\n", result);
goto err_cdev;
}
ib_ucm_class = class_create(THIS_MODULE, "infiniband_cm");
if (IS_ERR(ib_ucm_class)) {
result = PTR_ERR(ib_ucm_class);
- printk(KERN_ERR "UCM: Error <%d> creating class\n", result);
+ ucm_dbg("Error <%d> creating class\n", result);
goto err_class;
}