Commit 699924b1 authored by Steve Wise's avatar Steve Wise Committed by Roland Dreier

RDMA/cxgb3: Always call low level send function via cxgb3_ofld_send()

This avoids deadlocks.
Signed-off-by: default avatarSteve Wise <swise@opengridcomputing.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 92ddc447
...@@ -139,7 +139,7 @@ static void release_tid(struct t3cdev *tdev, u32 hwtid, struct sk_buff *skb) ...@@ -139,7 +139,7 @@ static void release_tid(struct t3cdev *tdev, u32 hwtid, struct sk_buff *skb)
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, hwtid)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, hwtid));
skb->priority = CPL_PRIORITY_SETUP; skb->priority = CPL_PRIORITY_SETUP;
tdev->send(tdev, skb); cxgb3_ofld_send(tdev, skb);
return; return;
} }
...@@ -161,7 +161,7 @@ int iwch_quiesce_tid(struct iwch_ep *ep) ...@@ -161,7 +161,7 @@ int iwch_quiesce_tid(struct iwch_ep *ep)
req->val = cpu_to_be64(1 << S_TCB_RX_QUIESCE); req->val = cpu_to_be64(1 << S_TCB_RX_QUIESCE);
skb->priority = CPL_PRIORITY_DATA; skb->priority = CPL_PRIORITY_DATA;
ep->com.tdev->send(ep->com.tdev, skb); cxgb3_ofld_send(ep->com.tdev, skb);
return 0; return 0;
} }
...@@ -183,7 +183,7 @@ int iwch_resume_tid(struct iwch_ep *ep) ...@@ -183,7 +183,7 @@ int iwch_resume_tid(struct iwch_ep *ep)
req->val = 0; req->val = 0;
skb->priority = CPL_PRIORITY_DATA; skb->priority = CPL_PRIORITY_DATA;
ep->com.tdev->send(ep->com.tdev, skb); cxgb3_ofld_send(ep->com.tdev, skb);
return 0; return 0;
} }
...@@ -784,7 +784,7 @@ static int update_rx_credits(struct iwch_ep *ep, u32 credits) ...@@ -784,7 +784,7 @@ static int update_rx_credits(struct iwch_ep *ep, u32 credits)
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RX_DATA_ACK, ep->hwtid)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RX_DATA_ACK, ep->hwtid));
req->credit_dack = htonl(V_RX_CREDITS(credits) | V_RX_FORCE_ACK(1)); req->credit_dack = htonl(V_RX_CREDITS(credits) | V_RX_FORCE_ACK(1));
skb->priority = CPL_PRIORITY_ACK; skb->priority = CPL_PRIORITY_ACK;
ep->com.tdev->send(ep->com.tdev, skb); cxgb3_ofld_send(ep->com.tdev, skb);
return credits; return credits;
} }
...@@ -1152,7 +1152,7 @@ static int listen_start(struct iwch_listen_ep *ep) ...@@ -1152,7 +1152,7 @@ static int listen_start(struct iwch_listen_ep *ep)
req->opt1 = htonl(V_CONN_POLICY(CPL_CONN_POLICY_ASK)); req->opt1 = htonl(V_CONN_POLICY(CPL_CONN_POLICY_ASK));
skb->priority = 1; skb->priority = 1;
ep->com.tdev->send(ep->com.tdev, skb); cxgb3_ofld_send(ep->com.tdev, skb);
return 0; return 0;
} }
...@@ -1186,7 +1186,7 @@ static int listen_stop(struct iwch_listen_ep *ep) ...@@ -1186,7 +1186,7 @@ static int listen_stop(struct iwch_listen_ep *ep)
req->cpu_idx = 0; req->cpu_idx = 0;
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid));
skb->priority = 1; skb->priority = 1;
ep->com.tdev->send(ep->com.tdev, skb); cxgb3_ofld_send(ep->com.tdev, skb);
return 0; return 0;
} }
...@@ -1264,7 +1264,7 @@ static void reject_cr(struct t3cdev *tdev, u32 hwtid, __be32 peer_ip, ...@@ -1264,7 +1264,7 @@ static void reject_cr(struct t3cdev *tdev, u32 hwtid, __be32 peer_ip,
rpl->opt0l_status = htonl(CPL_PASS_OPEN_REJECT); rpl->opt0l_status = htonl(CPL_PASS_OPEN_REJECT);
rpl->opt2 = 0; rpl->opt2 = 0;
rpl->rsvd = rpl->opt2; rpl->rsvd = rpl->opt2;
tdev->send(tdev, skb); cxgb3_ofld_send(tdev, skb);
} }
} }
...@@ -1557,7 +1557,7 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) ...@@ -1557,7 +1557,7 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx)
rpl->wr.wr_lo = htonl(V_WR_TID(ep->hwtid)); rpl->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid)); OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid));
rpl->cmd = CPL_ABORT_NO_RST; rpl->cmd = CPL_ABORT_NO_RST;
ep->com.tdev->send(ep->com.tdev, rpl_skb); cxgb3_ofld_send(ep->com.tdev, rpl_skb);
if (state != ABORTING) { if (state != ABORTING) {
state_set(&ep->com, DEAD); state_set(&ep->com, DEAD);
release_ep_resources(ep); release_ep_resources(ep);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment