Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -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));
	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, hwtid));
	skb->priority = CPL_PRIORITY_SETUP;
	tdev->send(tdev, skb);
	cxgb3_ofld_send(tdev, skb);
	return;
}

@@ -161,7 +161,7 @@ int iwch_quiesce_tid(struct iwch_ep *ep)
	req->val = cpu_to_be64(1 << S_TCB_RX_QUIESCE);

	skb->priority = CPL_PRIORITY_DATA;
	ep->com.tdev->send(ep->com.tdev, skb);
	cxgb3_ofld_send(ep->com.tdev, skb);
	return 0;
}

@@ -183,7 +183,7 @@ int iwch_resume_tid(struct iwch_ep *ep)
	req->val = 0;

	skb->priority = CPL_PRIORITY_DATA;
	ep->com.tdev->send(ep->com.tdev, skb);
	cxgb3_ofld_send(ep->com.tdev, skb);
	return 0;
}

@@ -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));
	req->credit_dack = htonl(V_RX_CREDITS(credits) | V_RX_FORCE_ACK(1));
	skb->priority = CPL_PRIORITY_ACK;
	ep->com.tdev->send(ep->com.tdev, skb);
	cxgb3_ofld_send(ep->com.tdev, skb);
	return credits;
}

@@ -1152,7 +1152,7 @@ static int listen_start(struct iwch_listen_ep *ep)
	req->opt1 = htonl(V_CONN_POLICY(CPL_CONN_POLICY_ASK));

	skb->priority = 1;
	ep->com.tdev->send(ep->com.tdev, skb);
	cxgb3_ofld_send(ep->com.tdev, skb);
	return 0;
}

@@ -1186,7 +1186,7 @@ static int listen_stop(struct iwch_listen_ep *ep)
	req->cpu_idx = 0;
	OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid));
	skb->priority = 1;
	ep->com.tdev->send(ep->com.tdev, skb);
	cxgb3_ofld_send(ep->com.tdev, skb);
	return 0;
}

@@ -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->opt2 = 0;
		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)
	rpl->wr.wr_lo = htonl(V_WR_TID(ep->hwtid));
	OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid));
	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) {
		state_set(&ep->com, DEAD);
		release_ep_resources(ep);