소스 검색

IB: Add devnode methods to cm_class and umad_class

We want the ucmX, umadX and issmX device nodes to show up under
/dev/infiniband, and additionally ucmX should have mode 0666.  Add
appropriate devnode methods to their class structs for this.

Signed-off-by: Roland Dreier <roland@purestorage.com>
Roland Dreier 14 년 전
부모
커밋
c3af0980ce
2개의 변경된 파일15개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      drivers/infiniband/core/cm.c
  2. 7 0
      drivers/infiniband/core/user_mad.c

+ 8 - 0
drivers/infiniband/core/cm.c

@@ -3639,8 +3639,16 @@ static struct kobj_type cm_port_obj_type = {
 	.release = cm_release_port_obj
 	.release = cm_release_port_obj
 };
 };
 
 
+static char *cm_devnode(struct device *dev, mode_t *mode)
+{
+	*mode = 0666;
+	return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev));
+}
+
 struct class cm_class = {
 struct class cm_class = {
+	.owner   = THIS_MODULE,
 	.name    = "infiniband_cm",
 	.name    = "infiniband_cm",
+	.devnode = cm_devnode,
 };
 };
 EXPORT_SYMBOL(cm_class);
 EXPORT_SYMBOL(cm_class);
 
 

+ 7 - 0
drivers/infiniband/core/user_mad.c

@@ -1176,6 +1176,11 @@ static void ib_umad_remove_one(struct ib_device *device)
 	kref_put(&umad_dev->ref, ib_umad_release_dev);
 	kref_put(&umad_dev->ref, ib_umad_release_dev);
 }
 }
 
 
+static char *umad_devnode(struct device *dev, mode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, "infiniband/%s", dev_name(dev));
+}
+
 static int __init ib_umad_init(void)
 static int __init ib_umad_init(void)
 {
 {
 	int ret;
 	int ret;
@@ -1194,6 +1199,8 @@ static int __init ib_umad_init(void)
 		goto out_chrdev;
 		goto out_chrdev;
 	}
 	}
 
 
+	umad_class->devnode = umad_devnode;
+
 	ret = class_create_file(umad_class, &class_attr_abi_version.attr);
 	ret = class_create_file(umad_class, &class_attr_abi_version.attr);
 	if (ret) {
 	if (ret) {
 		printk(KERN_ERR "user_mad: couldn't create abi_version attribute\n");
 		printk(KERN_ERR "user_mad: couldn't create abi_version attribute\n");