aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/core/mad_rmpp.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c
index ba112cd5f93c..3249e1d8c07b 100644
--- a/drivers/infiniband/core/mad_rmpp.c
+++ b/drivers/infiniband/core/mad_rmpp.c
@@ -151,28 +151,27 @@ static void ack_recv(struct mad_rmpp_recv *rmpp_recv,
151 ib_free_send_mad(msg); 151 ib_free_send_mad(msg);
152} 152}
153 153
154static int alloc_response_msg(struct ib_mad_agent *agent, 154static struct ib_mad_send_buf *alloc_response_msg(struct ib_mad_agent *agent,
155 struct ib_mad_recv_wc *recv_wc, 155 struct ib_mad_recv_wc *recv_wc)
156 struct ib_mad_send_buf **msg)
157{ 156{
158 struct ib_mad_send_buf *m; 157 struct ib_mad_send_buf *msg;
159 struct ib_ah *ah; 158 struct ib_ah *ah;
160 159
161 ah = ib_create_ah_from_wc(agent->qp->pd, recv_wc->wc, 160 ah = ib_create_ah_from_wc(agent->qp->pd, recv_wc->wc,
162 recv_wc->recv_buf.grh, agent->port_num); 161 recv_wc->recv_buf.grh, agent->port_num);
163 if (IS_ERR(ah)) 162 if (IS_ERR(ah))
164 return PTR_ERR(ah); 163 return (void *) ah;
165 164
166 m = ib_create_send_mad(agent, recv_wc->wc->src_qp, 165 msg = ib_create_send_mad(agent, recv_wc->wc->src_qp,
167 recv_wc->wc->pkey_index, 1, 166 recv_wc->wc->pkey_index, 1,
168 IB_MGMT_RMPP_HDR, IB_MGMT_RMPP_DATA, GFP_KERNEL); 167 IB_MGMT_RMPP_HDR, IB_MGMT_RMPP_DATA,
169 if (IS_ERR(m)) { 168 GFP_KERNEL);
169 if (IS_ERR(msg))
170 ib_destroy_ah(ah); 170 ib_destroy_ah(ah);
171 return PTR_ERR(m); 171 else
172 } 172 msg->ah = ah;
173 m->ah = ah; 173
174 *msg = m; 174 return msg;
175 return 0;
176} 175}
177 176
178void ib_rmpp_send_handler(struct ib_mad_send_wc *mad_send_wc) 177void ib_rmpp_send_handler(struct ib_mad_send_wc *mad_send_wc)
@@ -191,8 +190,8 @@ static void nack_recv(struct ib_mad_agent_private *agent,
191 struct ib_rmpp_mad *rmpp_mad; 190 struct ib_rmpp_mad *rmpp_mad;
192 int ret; 191 int ret;
193 192
194 ret = alloc_response_msg(&agent->agent, recv_wc, &msg); 193 msg = alloc_response_msg(&agent->agent, recv_wc);
195 if (ret) 194 if (IS_ERR(msg))
196 return; 195 return;
197 196
198 rmpp_mad = msg->mad; 197 rmpp_mad = msg->mad;