diff options
Diffstat (limited to 'drivers/infiniband/core/agent.c')
-rw-r--r-- | drivers/infiniband/core/agent.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/drivers/infiniband/core/agent.c b/drivers/infiniband/core/agent.c index 23d1957c4b29..729f0b0d983a 100644 --- a/drivers/infiniband/core/agent.c +++ b/drivers/infiniband/core/agent.c | |||
@@ -134,7 +134,7 @@ static int agent_mad_send(struct ib_mad_agent *mad_agent, | |||
134 | sizeof(mad_priv->mad), | 134 | sizeof(mad_priv->mad), |
135 | DMA_TO_DEVICE); | 135 | DMA_TO_DEVICE); |
136 | gather_list.length = sizeof(mad_priv->mad); | 136 | gather_list.length = sizeof(mad_priv->mad); |
137 | gather_list.lkey = (*port_priv->mr).lkey; | 137 | gather_list.lkey = mad_agent->mr->lkey; |
138 | 138 | ||
139 | send_wr.next = NULL; | 139 | send_wr.next = NULL; |
140 | send_wr.opcode = IB_WR_SEND; | 140 | send_wr.opcode = IB_WR_SEND; |
@@ -156,10 +156,10 @@ static int agent_mad_send(struct ib_mad_agent *mad_agent, | |||
156 | /* Should sgid be looked up ? */ | 156 | /* Should sgid be looked up ? */ |
157 | ah_attr.grh.sgid_index = 0; | 157 | ah_attr.grh.sgid_index = 0; |
158 | ah_attr.grh.hop_limit = grh->hop_limit; | 158 | ah_attr.grh.hop_limit = grh->hop_limit; |
159 | ah_attr.grh.flow_label = be32_to_cpup( | 159 | ah_attr.grh.flow_label = be32_to_cpu( |
160 | &grh->version_tclass_flow) & 0xfffff; | 160 | grh->version_tclass_flow) & 0xfffff; |
161 | ah_attr.grh.traffic_class = (be32_to_cpup( | 161 | ah_attr.grh.traffic_class = (be32_to_cpu( |
162 | &grh->version_tclass_flow) >> 20) & 0xff; | 162 | grh->version_tclass_flow) >> 20) & 0xff; |
163 | memcpy(ah_attr.grh.dgid.raw, | 163 | memcpy(ah_attr.grh.dgid.raw, |
164 | grh->sgid.raw, | 164 | grh->sgid.raw, |
165 | sizeof(ah_attr.grh.dgid)); | 165 | sizeof(ah_attr.grh.dgid)); |
@@ -322,22 +322,12 @@ int ib_agent_port_open(struct ib_device *device, int port_num) | |||
322 | goto error3; | 322 | goto error3; |
323 | } | 323 | } |
324 | 324 | ||
325 | port_priv->mr = ib_get_dma_mr(port_priv->smp_agent->qp->pd, | ||
326 | IB_ACCESS_LOCAL_WRITE); | ||
327 | if (IS_ERR(port_priv->mr)) { | ||
328 | printk(KERN_ERR SPFX "Couldn't get DMA MR\n"); | ||
329 | ret = PTR_ERR(port_priv->mr); | ||
330 | goto error4; | ||
331 | } | ||
332 | |||
333 | spin_lock_irqsave(&ib_agent_port_list_lock, flags); | 325 | spin_lock_irqsave(&ib_agent_port_list_lock, flags); |
334 | list_add_tail(&port_priv->port_list, &ib_agent_port_list); | 326 | list_add_tail(&port_priv->port_list, &ib_agent_port_list); |
335 | spin_unlock_irqrestore(&ib_agent_port_list_lock, flags); | 327 | spin_unlock_irqrestore(&ib_agent_port_list_lock, flags); |
336 | 328 | ||
337 | return 0; | 329 | return 0; |
338 | 330 | ||
339 | error4: | ||
340 | ib_unregister_mad_agent(port_priv->perf_mgmt_agent); | ||
341 | error3: | 331 | error3: |
342 | ib_unregister_mad_agent(port_priv->smp_agent); | 332 | ib_unregister_mad_agent(port_priv->smp_agent); |
343 | error2: | 333 | error2: |
@@ -361,8 +351,6 @@ int ib_agent_port_close(struct ib_device *device, int port_num) | |||
361 | list_del(&port_priv->port_list); | 351 | list_del(&port_priv->port_list); |
362 | spin_unlock_irqrestore(&ib_agent_port_list_lock, flags); | 352 | spin_unlock_irqrestore(&ib_agent_port_list_lock, flags); |
363 | 353 | ||
364 | ib_dereg_mr(port_priv->mr); | ||
365 | |||
366 | ib_unregister_mad_agent(port_priv->perf_mgmt_agent); | 354 | ib_unregister_mad_agent(port_priv->perf_mgmt_agent); |
367 | ib_unregister_mad_agent(port_priv->smp_agent); | 355 | ib_unregister_mad_agent(port_priv->smp_agent); |
368 | kfree(port_priv); | 356 | kfree(port_priv); |