.. | .. |
---|
58 | 58 | |
---|
59 | 59 | ret = ib_query_port(&dev->ib_dev, port_num, tprops); |
---|
60 | 60 | if (ret) { |
---|
61 | | - printk(KERN_WARNING "ib_query_port failed (%d) for %s port %d\n", |
---|
62 | | - ret, dev->ib_dev.name, port_num); |
---|
| 61 | + dev_warn(&dev->ib_dev.dev, |
---|
| 62 | + "ib_query_port failed (%d) forport %d\n", ret, |
---|
| 63 | + port_num); |
---|
63 | 64 | goto out; |
---|
64 | 65 | } |
---|
65 | 66 | |
---|
.. | .. |
---|
88 | 89 | rdma_ah_set_port_num(&ah_attr, port_num); |
---|
89 | 90 | |
---|
90 | 91 | new_ah = rdma_create_ah(dev->send_agent[port_num - 1][0]->qp->pd, |
---|
91 | | - &ah_attr); |
---|
| 92 | + &ah_attr, 0); |
---|
92 | 93 | if (IS_ERR(new_ah)) |
---|
93 | 94 | return; |
---|
94 | 95 | |
---|
95 | 96 | spin_lock_irqsave(&dev->sm_lock, flags); |
---|
96 | 97 | if (dev->sm_ah[port_num - 1]) |
---|
97 | | - rdma_destroy_ah(dev->sm_ah[port_num - 1]); |
---|
| 98 | + rdma_destroy_ah(dev->sm_ah[port_num - 1], 0); |
---|
98 | 99 | dev->sm_ah[port_num - 1] = new_ah; |
---|
99 | 100 | spin_unlock_irqrestore(&dev->sm_lock, flags); |
---|
100 | 101 | } |
---|
.. | .. |
---|
195 | 196 | } |
---|
196 | 197 | } |
---|
197 | 198 | |
---|
198 | | -int mthca_process_mad(struct ib_device *ibdev, |
---|
199 | | - int mad_flags, |
---|
200 | | - u8 port_num, |
---|
201 | | - const struct ib_wc *in_wc, |
---|
202 | | - const struct ib_grh *in_grh, |
---|
203 | | - const struct ib_mad_hdr *in, size_t in_mad_size, |
---|
204 | | - struct ib_mad_hdr *out, size_t *out_mad_size, |
---|
205 | | - u16 *out_mad_pkey_index) |
---|
| 199 | +int mthca_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, |
---|
| 200 | + const struct ib_wc *in_wc, const struct ib_grh *in_grh, |
---|
| 201 | + const struct ib_mad *in, struct ib_mad *out, |
---|
| 202 | + size_t *out_mad_size, u16 *out_mad_pkey_index) |
---|
206 | 203 | { |
---|
207 | 204 | int err; |
---|
208 | 205 | u16 slid = in_wc ? ib_lid_cpu16(in_wc->slid) : be16_to_cpu(IB_LID_PERMISSIVE); |
---|
209 | 206 | u16 prev_lid = 0; |
---|
210 | 207 | struct ib_port_attr pattr; |
---|
211 | | - const struct ib_mad *in_mad = (const struct ib_mad *)in; |
---|
212 | | - struct ib_mad *out_mad = (struct ib_mad *)out; |
---|
213 | | - |
---|
214 | | - if (WARN_ON_ONCE(in_mad_size != sizeof(*in_mad) || |
---|
215 | | - *out_mad_size != sizeof(*out_mad))) |
---|
216 | | - return IB_MAD_RESULT_FAILURE; |
---|
217 | 208 | |
---|
218 | 209 | /* Forward locally generated traps to the SM */ |
---|
219 | | - if (in_mad->mad_hdr.method == IB_MGMT_METHOD_TRAP && |
---|
220 | | - slid == 0) { |
---|
221 | | - forward_trap(to_mdev(ibdev), port_num, in_mad); |
---|
| 210 | + if (in->mad_hdr.method == IB_MGMT_METHOD_TRAP && !slid) { |
---|
| 211 | + forward_trap(to_mdev(ibdev), port_num, in); |
---|
222 | 212 | return IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_CONSUMED; |
---|
223 | 213 | } |
---|
224 | 214 | |
---|
.. | .. |
---|
228 | 218 | * Only handle PMA and Mellanox vendor-specific class gets and |
---|
229 | 219 | * sets for other classes. |
---|
230 | 220 | */ |
---|
231 | | - if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED || |
---|
232 | | - in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) { |
---|
233 | | - if (in_mad->mad_hdr.method != IB_MGMT_METHOD_GET && |
---|
234 | | - in_mad->mad_hdr.method != IB_MGMT_METHOD_SET && |
---|
235 | | - in_mad->mad_hdr.method != IB_MGMT_METHOD_TRAP_REPRESS) |
---|
| 221 | + if (in->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED || |
---|
| 222 | + in->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) { |
---|
| 223 | + if (in->mad_hdr.method != IB_MGMT_METHOD_GET && |
---|
| 224 | + in->mad_hdr.method != IB_MGMT_METHOD_SET && |
---|
| 225 | + in->mad_hdr.method != IB_MGMT_METHOD_TRAP_REPRESS) |
---|
236 | 226 | return IB_MAD_RESULT_SUCCESS; |
---|
237 | 227 | |
---|
238 | 228 | /* |
---|
239 | 229 | * Don't process SMInfo queries or vendor-specific |
---|
240 | 230 | * MADs -- the SMA can't handle them. |
---|
241 | 231 | */ |
---|
242 | | - if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO || |
---|
243 | | - ((in_mad->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) == |
---|
| 232 | + if (in->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO || |
---|
| 233 | + ((in->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) == |
---|
244 | 234 | IB_SMP_ATTR_VENDOR_MASK)) |
---|
245 | 235 | return IB_MAD_RESULT_SUCCESS; |
---|
246 | | - } else if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT || |
---|
247 | | - in_mad->mad_hdr.mgmt_class == MTHCA_VENDOR_CLASS1 || |
---|
248 | | - in_mad->mad_hdr.mgmt_class == MTHCA_VENDOR_CLASS2) { |
---|
249 | | - if (in_mad->mad_hdr.method != IB_MGMT_METHOD_GET && |
---|
250 | | - in_mad->mad_hdr.method != IB_MGMT_METHOD_SET) |
---|
| 236 | + } else if (in->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT || |
---|
| 237 | + in->mad_hdr.mgmt_class == MTHCA_VENDOR_CLASS1 || |
---|
| 238 | + in->mad_hdr.mgmt_class == MTHCA_VENDOR_CLASS2) { |
---|
| 239 | + if (in->mad_hdr.method != IB_MGMT_METHOD_GET && |
---|
| 240 | + in->mad_hdr.method != IB_MGMT_METHOD_SET) |
---|
251 | 241 | return IB_MAD_RESULT_SUCCESS; |
---|
252 | 242 | } else |
---|
253 | 243 | return IB_MAD_RESULT_SUCCESS; |
---|
254 | | - if ((in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED || |
---|
255 | | - in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) && |
---|
256 | | - in_mad->mad_hdr.method == IB_MGMT_METHOD_SET && |
---|
257 | | - in_mad->mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO && |
---|
| 244 | + if ((in->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_LID_ROUTED || |
---|
| 245 | + in->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) && |
---|
| 246 | + in->mad_hdr.method == IB_MGMT_METHOD_SET && |
---|
| 247 | + in->mad_hdr.attr_id == IB_SMP_ATTR_PORT_INFO && |
---|
258 | 248 | !ib_query_port(ibdev, port_num, &pattr)) |
---|
259 | 249 | prev_lid = ib_lid_cpu16(pattr.lid); |
---|
260 | 250 | |
---|
261 | | - err = mthca_MAD_IFC(to_mdev(ibdev), |
---|
262 | | - mad_flags & IB_MAD_IGNORE_MKEY, |
---|
263 | | - mad_flags & IB_MAD_IGNORE_BKEY, |
---|
264 | | - port_num, in_wc, in_grh, in_mad, out_mad); |
---|
| 251 | + err = mthca_MAD_IFC(to_mdev(ibdev), mad_flags & IB_MAD_IGNORE_MKEY, |
---|
| 252 | + mad_flags & IB_MAD_IGNORE_BKEY, port_num, in_wc, |
---|
| 253 | + in_grh, in, out); |
---|
265 | 254 | if (err == -EBADMSG) |
---|
266 | 255 | return IB_MAD_RESULT_SUCCESS; |
---|
267 | 256 | else if (err) { |
---|
.. | .. |
---|
269 | 258 | return IB_MAD_RESULT_FAILURE; |
---|
270 | 259 | } |
---|
271 | 260 | |
---|
272 | | - if (!out_mad->mad_hdr.status) { |
---|
273 | | - smp_snoop(ibdev, port_num, in_mad, prev_lid); |
---|
274 | | - node_desc_override(ibdev, out_mad); |
---|
| 261 | + if (!out->mad_hdr.status) { |
---|
| 262 | + smp_snoop(ibdev, port_num, in, prev_lid); |
---|
| 263 | + node_desc_override(ibdev, out); |
---|
275 | 264 | } |
---|
276 | 265 | |
---|
277 | 266 | /* set return bit in status of directed route responses */ |
---|
278 | | - if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) |
---|
279 | | - out_mad->mad_hdr.status |= cpu_to_be16(1 << 15); |
---|
| 267 | + if (in->mad_hdr.mgmt_class == IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) |
---|
| 268 | + out->mad_hdr.status |= cpu_to_be16(1 << 15); |
---|
280 | 269 | |
---|
281 | | - if (in_mad->mad_hdr.method == IB_MGMT_METHOD_TRAP_REPRESS) |
---|
| 270 | + if (in->mad_hdr.method == IB_MGMT_METHOD_TRAP_REPRESS) |
---|
282 | 271 | /* no response for trap repress */ |
---|
283 | 272 | return IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_CONSUMED; |
---|
284 | 273 | |
---|
.. | .. |
---|
346 | 335 | } |
---|
347 | 336 | |
---|
348 | 337 | if (dev->sm_ah[p]) |
---|
349 | | - rdma_destroy_ah(dev->sm_ah[p]); |
---|
| 338 | + rdma_destroy_ah(dev->sm_ah[p], |
---|
| 339 | + RDMA_DESTROY_AH_SLEEPABLE); |
---|
350 | 340 | } |
---|
351 | 341 | } |
---|