summaryrefslogtreecommitdiffstats
path: root/net/rds/ib.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rds/ib.c')
-rw-r--r--net/rds/ib.c34
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)
122static void rds_ib_add_one(struct ib_device *device) 122static 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
203put_dev: 193put_dev:
204 rds_ib_dev_put(rds_ibdev); 194 rds_ib_dev_put(rds_ibdev);
205free_attr:
206 kfree(dev_attr);
207} 195}
208 196
209/* 197/*