diff options
author | Alexander Chiang <achiang@hp.com> | 2010-02-02 14:08:25 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2010-02-24 13:23:43 -0500 |
commit | 2b937afcab34e4f739e2f7cd6062870fbe6b2ccf (patch) | |
tree | 7accb5590cf403ed8dec397c70f917ae9181b1f3 | |
parent | 9afed76d59749f1b95e5e1d7d5bc4c3041852aa9 (diff) |
IB/umad: Convert *cdev to cdev in struct ib_umad_port
Instead of storing pointers to cdev and sm_cdev, embed the full
structures instead.
This change allows us to use the container_of() macro in ib_umad_open()
and ib_umad_sm_open() in a future patch.
This change increases the size of struct ib_umad_port to 320 bytes
from 128.
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/core/user_mad.c | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c index 7de02969ed7d..40440ef1b31c 100644 --- a/drivers/infiniband/core/user_mad.c +++ b/drivers/infiniband/core/user_mad.c | |||
@@ -87,10 +87,10 @@ enum { | |||
87 | */ | 87 | */ |
88 | 88 | ||
89 | struct ib_umad_port { | 89 | struct ib_umad_port { |
90 | struct cdev *cdev; | 90 | struct cdev cdev; |
91 | struct device *dev; | 91 | struct device *dev; |
92 | 92 | ||
93 | struct cdev *sm_cdev; | 93 | struct cdev sm_cdev; |
94 | struct device *sm_dev; | 94 | struct device *sm_dev; |
95 | struct semaphore sm_sem; | 95 | struct semaphore sm_sem; |
96 | 96 | ||
@@ -1008,17 +1008,14 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | |||
1008 | mutex_init(&port->file_mutex); | 1008 | mutex_init(&port->file_mutex); |
1009 | INIT_LIST_HEAD(&port->file_list); | 1009 | INIT_LIST_HEAD(&port->file_list); |
1010 | 1010 | ||
1011 | port->cdev = cdev_alloc(); | 1011 | cdev_init(&port->cdev, &umad_fops); |
1012 | if (!port->cdev) | 1012 | port->cdev.owner = THIS_MODULE; |
1013 | return -1; | 1013 | kobject_set_name(&port->cdev.kobj, "umad%d", port->dev_num); |
1014 | port->cdev->owner = THIS_MODULE; | 1014 | if (cdev_add(&port->cdev, base_dev + port->dev_num, 1)) |
1015 | port->cdev->ops = &umad_fops; | ||
1016 | kobject_set_name(&port->cdev->kobj, "umad%d", port->dev_num); | ||
1017 | if (cdev_add(port->cdev, base_dev + port->dev_num, 1)) | ||
1018 | goto err_cdev; | 1015 | goto err_cdev; |
1019 | 1016 | ||
1020 | port->dev = device_create(umad_class, device->dma_device, | 1017 | port->dev = device_create(umad_class, device->dma_device, |
1021 | port->cdev->dev, port, | 1018 | port->cdev.dev, port, |
1022 | "umad%d", port->dev_num); | 1019 | "umad%d", port->dev_num); |
1023 | if (IS_ERR(port->dev)) | 1020 | if (IS_ERR(port->dev)) |
1024 | goto err_cdev; | 1021 | goto err_cdev; |
@@ -1028,17 +1025,14 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | |||
1028 | if (device_create_file(port->dev, &dev_attr_port)) | 1025 | if (device_create_file(port->dev, &dev_attr_port)) |
1029 | goto err_dev; | 1026 | goto err_dev; |
1030 | 1027 | ||
1031 | port->sm_cdev = cdev_alloc(); | 1028 | cdev_init(&port->sm_cdev, &umad_sm_fops); |
1032 | if (!port->sm_cdev) | 1029 | port->sm_cdev.owner = THIS_MODULE; |
1033 | goto err_dev; | 1030 | kobject_set_name(&port->sm_cdev.kobj, "issm%d", port->dev_num); |
1034 | port->sm_cdev->owner = THIS_MODULE; | 1031 | if (cdev_add(&port->sm_cdev, base_dev + port->dev_num + IB_UMAD_MAX_PORTS, 1)) |
1035 | port->sm_cdev->ops = &umad_sm_fops; | ||
1036 | kobject_set_name(&port->sm_cdev->kobj, "issm%d", port->dev_num); | ||
1037 | if (cdev_add(port->sm_cdev, base_dev + port->dev_num + IB_UMAD_MAX_PORTS, 1)) | ||
1038 | goto err_sm_cdev; | 1032 | goto err_sm_cdev; |
1039 | 1033 | ||
1040 | port->sm_dev = device_create(umad_class, device->dma_device, | 1034 | port->sm_dev = device_create(umad_class, device->dma_device, |
1041 | port->sm_cdev->dev, port, | 1035 | port->sm_cdev.dev, port, |
1042 | "issm%d", port->dev_num); | 1036 | "issm%d", port->dev_num); |
1043 | if (IS_ERR(port->sm_dev)) | 1037 | if (IS_ERR(port->sm_dev)) |
1044 | goto err_sm_cdev; | 1038 | goto err_sm_cdev; |
@@ -1055,16 +1049,16 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | |||
1055 | return 0; | 1049 | return 0; |
1056 | 1050 | ||
1057 | err_sm_dev: | 1051 | err_sm_dev: |
1058 | device_destroy(umad_class, port->sm_cdev->dev); | 1052 | device_destroy(umad_class, port->sm_cdev.dev); |
1059 | 1053 | ||
1060 | err_sm_cdev: | 1054 | err_sm_cdev: |
1061 | cdev_del(port->sm_cdev); | 1055 | cdev_del(&port->sm_cdev); |
1062 | 1056 | ||
1063 | err_dev: | 1057 | err_dev: |
1064 | device_destroy(umad_class, port->cdev->dev); | 1058 | device_destroy(umad_class, port->cdev.dev); |
1065 | 1059 | ||
1066 | err_cdev: | 1060 | err_cdev: |
1067 | cdev_del(port->cdev); | 1061 | cdev_del(&port->cdev); |
1068 | clear_bit(port->dev_num, dev_map); | 1062 | clear_bit(port->dev_num, dev_map); |
1069 | 1063 | ||
1070 | return -1; | 1064 | return -1; |
@@ -1079,11 +1073,11 @@ static void ib_umad_kill_port(struct ib_umad_port *port) | |||
1079 | dev_set_drvdata(port->dev, NULL); | 1073 | dev_set_drvdata(port->dev, NULL); |
1080 | dev_set_drvdata(port->sm_dev, NULL); | 1074 | dev_set_drvdata(port->sm_dev, NULL); |
1081 | 1075 | ||
1082 | device_destroy(umad_class, port->cdev->dev); | 1076 | device_destroy(umad_class, port->cdev.dev); |
1083 | device_destroy(umad_class, port->sm_cdev->dev); | 1077 | device_destroy(umad_class, port->sm_cdev.dev); |
1084 | 1078 | ||
1085 | cdev_del(port->cdev); | 1079 | cdev_del(&port->cdev); |
1086 | cdev_del(port->sm_cdev); | 1080 | cdev_del(&port->sm_cdev); |
1087 | 1081 | ||
1088 | spin_lock(&port_lock); | 1082 | spin_lock(&port_lock); |
1089 | umad_port[port->dev_num] = NULL; | 1083 | umad_port[port->dev_num] = NULL; |