diff options
Diffstat (limited to 'net/rds/ib.c')
-rw-r--r-- | net/rds/ib.c | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/net/rds/ib.c b/net/rds/ib.c index f222885ac0c7..9481d55ff6cb 100644 --- a/net/rds/ib.c +++ b/net/rds/ib.c | |||
@@ -122,44 +122,34 @@ void rds_ib_dev_put(struct rds_ib_device *rds_ibdev) | |||
122 | static void rds_ib_add_one(struct ib_device *device) | 122 | static void rds_ib_add_one(struct ib_device *device) |
123 | { | 123 | { |
124 | struct rds_ib_device *rds_ibdev; | 124 | struct rds_ib_device *rds_ibdev; |
125 | struct ib_device_attr *dev_attr; | ||
126 | 125 | ||
127 | /* Only handle IB (no iWARP) devices */ | 126 | /* Only handle IB (no iWARP) devices */ |
128 | if (device->node_type != RDMA_NODE_IB_CA) | 127 | if (device->node_type != RDMA_NODE_IB_CA) |
129 | return; | 128 | return; |
130 | 129 | ||
131 | dev_attr = kmalloc(sizeof *dev_attr, GFP_KERNEL); | ||
132 | if (!dev_attr) | ||
133 | return; | ||
134 | |||
135 | if (ib_query_device(device, dev_attr)) { | ||
136 | rdsdebug("Query device failed for %s\n", device->name); | ||
137 | goto free_attr; | ||
138 | } | ||
139 | |||
140 | rds_ibdev = kzalloc_node(sizeof(struct rds_ib_device), GFP_KERNEL, | 130 | rds_ibdev = kzalloc_node(sizeof(struct rds_ib_device), GFP_KERNEL, |
141 | ibdev_to_node(device)); | 131 | ibdev_to_node(device)); |
142 | if (!rds_ibdev) | 132 | if (!rds_ibdev) |
143 | goto free_attr; | 133 | return; |
144 | 134 | ||
145 | spin_lock_init(&rds_ibdev->spinlock); | 135 | spin_lock_init(&rds_ibdev->spinlock); |
146 | atomic_set(&rds_ibdev->refcount, 1); | 136 | atomic_set(&rds_ibdev->refcount, 1); |
147 | INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free); | 137 | INIT_WORK(&rds_ibdev->free_work, rds_ib_dev_free); |
148 | 138 | ||
149 | rds_ibdev->max_wrs = dev_attr->max_qp_wr; | 139 | rds_ibdev->max_wrs = device->attrs.max_qp_wr; |
150 | rds_ibdev->max_sge = min(dev_attr->max_sge, RDS_IB_MAX_SGE); | 140 | rds_ibdev->max_sge = min(device->attrs.max_sge, RDS_IB_MAX_SGE); |
151 | 141 | ||
152 | rds_ibdev->fmr_max_remaps = dev_attr->max_map_per_fmr?: 32; | 142 | rds_ibdev->fmr_max_remaps = device->attrs.max_map_per_fmr?: 32; |
153 | rds_ibdev->max_1m_fmrs = dev_attr->max_mr ? | 143 | rds_ibdev->max_1m_fmrs = device->attrs.max_mr ? |
154 | min_t(unsigned int, (dev_attr->max_mr / 2), | 144 | min_t(unsigned int, (device->attrs.max_mr / 2), |
155 | rds_ib_fmr_1m_pool_size) : rds_ib_fmr_1m_pool_size; | 145 | rds_ib_fmr_1m_pool_size) : rds_ib_fmr_1m_pool_size; |
156 | 146 | ||
157 | rds_ibdev->max_8k_fmrs = dev_attr->max_mr ? | 147 | rds_ibdev->max_8k_fmrs = device->attrs.max_mr ? |
158 | min_t(unsigned int, ((dev_attr->max_mr / 2) * RDS_MR_8K_SCALE), | 148 | min_t(unsigned int, ((device->attrs.max_mr / 2) * RDS_MR_8K_SCALE), |
159 | rds_ib_fmr_8k_pool_size) : rds_ib_fmr_8k_pool_size; | 149 | rds_ib_fmr_8k_pool_size) : rds_ib_fmr_8k_pool_size; |
160 | 150 | ||
161 | rds_ibdev->max_initiator_depth = dev_attr->max_qp_init_rd_atom; | 151 | rds_ibdev->max_initiator_depth = device->attrs.max_qp_init_rd_atom; |
162 | rds_ibdev->max_responder_resources = dev_attr->max_qp_rd_atom; | 152 | rds_ibdev->max_responder_resources = device->attrs.max_qp_rd_atom; |
163 | 153 | ||
164 | rds_ibdev->dev = device; | 154 | rds_ibdev->dev = device; |
165 | rds_ibdev->pd = ib_alloc_pd(device); | 155 | rds_ibdev->pd = ib_alloc_pd(device); |
@@ -183,7 +173,7 @@ static void rds_ib_add_one(struct ib_device *device) | |||
183 | } | 173 | } |
184 | 174 | ||
185 | rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, fmr_max_remaps = %d, max_1m_fmrs = %d, max_8k_fmrs = %d\n", | 175 | rdsdebug("RDS/IB: max_mr = %d, max_wrs = %d, max_sge = %d, fmr_max_remaps = %d, max_1m_fmrs = %d, max_8k_fmrs = %d\n", |
186 | dev_attr->max_fmr, rds_ibdev->max_wrs, rds_ibdev->max_sge, | 176 | device->attrs.max_fmr, rds_ibdev->max_wrs, rds_ibdev->max_sge, |
187 | rds_ibdev->fmr_max_remaps, rds_ibdev->max_1m_fmrs, | 177 | rds_ibdev->fmr_max_remaps, rds_ibdev->max_1m_fmrs, |
188 | rds_ibdev->max_8k_fmrs); | 178 | rds_ibdev->max_8k_fmrs); |
189 | 179 | ||
@@ -202,8 +192,6 @@ static void rds_ib_add_one(struct ib_device *device) | |||
202 | 192 | ||
203 | put_dev: | 193 | put_dev: |
204 | rds_ib_dev_put(rds_ibdev); | 194 | rds_ib_dev_put(rds_ibdev); |
205 | free_attr: | ||
206 | kfree(dev_attr); | ||
207 | } | 195 | } |
208 | 196 | ||
209 | /* | 197 | /* |