brintos

brintos / linux-shallow public Read only

0
0
Text · 157.1 KiB · c465966 Raw
5534 lines · c
1// SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)2/*3 * Copyright(c) 2018 - 2020 Intel Corporation.4 *5 */6 7#include "hfi.h"8#include "qp.h"9#include "rc.h"10#include "verbs.h"11#include "tid_rdma.h"12#include "exp_rcv.h"13#include "trace.h"14 15/**16 * DOC: TID RDMA READ protocol17 *18 * This is an end-to-end protocol at the hfi1 level between two nodes that19 * improves performance by avoiding data copy on the requester side. It20 * converts a qualified RDMA READ request into a TID RDMA READ request on21 * the requester side and thereafter handles the request and response22 * differently. To be qualified, the RDMA READ request should meet the23 * following:24 * -- The total data length should be greater than 256K;25 * -- The total data length should be a multiple of 4K page size;26 * -- Each local scatter-gather entry should be 4K page aligned;27 * -- Each local scatter-gather entry should be a multiple of 4K page size;28 */29 30#define RCV_TID_FLOW_TABLE_CTRL_FLOW_VALID_SMASK BIT_ULL(32)31#define RCV_TID_FLOW_TABLE_CTRL_HDR_SUPP_EN_SMASK BIT_ULL(33)32#define RCV_TID_FLOW_TABLE_CTRL_KEEP_AFTER_SEQ_ERR_SMASK BIT_ULL(34)33#define RCV_TID_FLOW_TABLE_CTRL_KEEP_ON_GEN_ERR_SMASK BIT_ULL(35)34#define RCV_TID_FLOW_TABLE_STATUS_SEQ_MISMATCH_SMASK BIT_ULL(37)35#define RCV_TID_FLOW_TABLE_STATUS_GEN_MISMATCH_SMASK BIT_ULL(38)36 37/* Maximum number of packets within a flow generation. */38#define MAX_TID_FLOW_PSN BIT(HFI1_KDETH_BTH_SEQ_SHIFT)39 40#define GENERATION_MASK 0xFFFFF41 42static u32 mask_generation(u32 a)43{44	return a & GENERATION_MASK;45}46 47/* Reserved generation value to set to unused flows for kernel contexts */48#define KERN_GENERATION_RESERVED mask_generation(U32_MAX)49 50/*51 * J_KEY for kernel contexts when TID RDMA is used.52 * See generate_jkey() in hfi.h for more information.53 */54#define TID_RDMA_JKEY                   3255#define HFI1_KERNEL_MIN_JKEY HFI1_ADMIN_JKEY_RANGE56#define HFI1_KERNEL_MAX_JKEY (2 * HFI1_ADMIN_JKEY_RANGE - 1)57 58/* Maximum number of segments in flight per QP request. */59#define TID_RDMA_MAX_READ_SEGS_PER_REQ  660#define TID_RDMA_MAX_WRITE_SEGS_PER_REQ 461#define MAX_REQ max_t(u16, TID_RDMA_MAX_READ_SEGS_PER_REQ, \62			TID_RDMA_MAX_WRITE_SEGS_PER_REQ)63#define MAX_FLOWS roundup_pow_of_two(MAX_REQ + 1)64 65#define MAX_EXPECTED_PAGES     (MAX_EXPECTED_BUFFER / PAGE_SIZE)66 67#define TID_RDMA_DESTQP_FLOW_SHIFT      1168#define TID_RDMA_DESTQP_FLOW_MASK       0x1f69 70#define TID_OPFN_QP_CTXT_MASK 0xff71#define TID_OPFN_QP_CTXT_SHIFT 5672#define TID_OPFN_QP_KDETH_MASK 0xff73#define TID_OPFN_QP_KDETH_SHIFT 4874#define TID_OPFN_MAX_LEN_MASK 0x7ff75#define TID_OPFN_MAX_LEN_SHIFT 3776#define TID_OPFN_TIMEOUT_MASK 0x1f77#define TID_OPFN_TIMEOUT_SHIFT 3278#define TID_OPFN_RESERVED_MASK 0x3f79#define TID_OPFN_RESERVED_SHIFT 2680#define TID_OPFN_URG_MASK 0x181#define TID_OPFN_URG_SHIFT 2582#define TID_OPFN_VER_MASK 0x783#define TID_OPFN_VER_SHIFT 2284#define TID_OPFN_JKEY_MASK 0x3f85#define TID_OPFN_JKEY_SHIFT 1686#define TID_OPFN_MAX_READ_MASK 0x3f87#define TID_OPFN_MAX_READ_SHIFT 1088#define TID_OPFN_MAX_WRITE_MASK 0x3f89#define TID_OPFN_MAX_WRITE_SHIFT 490 91/*92 * OPFN TID layout93 *94 * 63               47               31               1595 * NNNNNNNNKKKKKKKK MMMMMMMMMMMTTTTT DDDDDDUVVVJJJJJJ RRRRRRWWWWWWCCCC96 * 3210987654321098 7654321098765432 1098765432109876 543210987654321097 * N - the context Number98 * K - the Kdeth_qp99 * M - Max_len100 * T - Timeout101 * D - reserveD102 * V - version103 * U - Urg capable104 * J - Jkey105 * R - max_Read106 * W - max_Write107 * C - Capcode108 */109 110static void tid_rdma_trigger_resume(struct work_struct *work);111static void hfi1_kern_exp_rcv_free_flows(struct tid_rdma_request *req);112static int hfi1_kern_exp_rcv_alloc_flows(struct tid_rdma_request *req,113					 gfp_t gfp);114static void hfi1_init_trdma_req(struct rvt_qp *qp,115				struct tid_rdma_request *req);116static void hfi1_tid_write_alloc_resources(struct rvt_qp *qp, bool intr_ctx);117static void hfi1_tid_timeout(struct timer_list *t);118static void hfi1_add_tid_reap_timer(struct rvt_qp *qp);119static void hfi1_mod_tid_reap_timer(struct rvt_qp *qp);120static void hfi1_mod_tid_retry_timer(struct rvt_qp *qp);121static int hfi1_stop_tid_retry_timer(struct rvt_qp *qp);122static void hfi1_tid_retry_timeout(struct timer_list *t);123static int make_tid_rdma_ack(struct rvt_qp *qp,124			     struct ib_other_headers *ohdr,125			     struct hfi1_pkt_state *ps);126static void hfi1_do_tid_send(struct rvt_qp *qp);127static u32 read_r_next_psn(struct hfi1_devdata *dd, u8 ctxt, u8 fidx);128static void tid_rdma_rcv_err(struct hfi1_packet *packet,129			     struct ib_other_headers *ohdr,130			     struct rvt_qp *qp, u32 psn, int diff, bool fecn);131static void update_r_next_psn_fecn(struct hfi1_packet *packet,132				   struct hfi1_qp_priv *priv,133				   struct hfi1_ctxtdata *rcd,134				   struct tid_rdma_flow *flow,135				   bool fecn);136 137static void validate_r_tid_ack(struct hfi1_qp_priv *priv)138{139	if (priv->r_tid_ack == HFI1_QP_WQE_INVALID)140		priv->r_tid_ack = priv->r_tid_tail;141}142 143static void tid_rdma_schedule_ack(struct rvt_qp *qp)144{145	struct hfi1_qp_priv *priv = qp->priv;146 147	priv->s_flags |= RVT_S_ACK_PENDING;148	hfi1_schedule_tid_send(qp);149}150 151static void tid_rdma_trigger_ack(struct rvt_qp *qp)152{153	validate_r_tid_ack(qp->priv);154	tid_rdma_schedule_ack(qp);155}156 157static u64 tid_rdma_opfn_encode(struct tid_rdma_params *p)158{159	return160		(((u64)p->qp & TID_OPFN_QP_CTXT_MASK) <<161			TID_OPFN_QP_CTXT_SHIFT) |162		((((u64)p->qp >> 16) & TID_OPFN_QP_KDETH_MASK) <<163			TID_OPFN_QP_KDETH_SHIFT) |164		(((u64)((p->max_len >> PAGE_SHIFT) - 1) &165			TID_OPFN_MAX_LEN_MASK) << TID_OPFN_MAX_LEN_SHIFT) |166		(((u64)p->timeout & TID_OPFN_TIMEOUT_MASK) <<167			TID_OPFN_TIMEOUT_SHIFT) |168		(((u64)p->urg & TID_OPFN_URG_MASK) << TID_OPFN_URG_SHIFT) |169		(((u64)p->jkey & TID_OPFN_JKEY_MASK) << TID_OPFN_JKEY_SHIFT) |170		(((u64)p->max_read & TID_OPFN_MAX_READ_MASK) <<171			TID_OPFN_MAX_READ_SHIFT) |172		(((u64)p->max_write & TID_OPFN_MAX_WRITE_MASK) <<173			TID_OPFN_MAX_WRITE_SHIFT);174}175 176static void tid_rdma_opfn_decode(struct tid_rdma_params *p, u64 data)177{178	p->max_len = (((data >> TID_OPFN_MAX_LEN_SHIFT) &179		TID_OPFN_MAX_LEN_MASK) + 1) << PAGE_SHIFT;180	p->jkey = (data >> TID_OPFN_JKEY_SHIFT) & TID_OPFN_JKEY_MASK;181	p->max_write = (data >> TID_OPFN_MAX_WRITE_SHIFT) &182		TID_OPFN_MAX_WRITE_MASK;183	p->max_read = (data >> TID_OPFN_MAX_READ_SHIFT) &184		TID_OPFN_MAX_READ_MASK;185	p->qp =186		((((data >> TID_OPFN_QP_KDETH_SHIFT) & TID_OPFN_QP_KDETH_MASK)187			<< 16) |188		((data >> TID_OPFN_QP_CTXT_SHIFT) & TID_OPFN_QP_CTXT_MASK));189	p->urg = (data >> TID_OPFN_URG_SHIFT) & TID_OPFN_URG_MASK;190	p->timeout = (data >> TID_OPFN_TIMEOUT_SHIFT) & TID_OPFN_TIMEOUT_MASK;191}192 193void tid_rdma_opfn_init(struct rvt_qp *qp, struct tid_rdma_params *p)194{195	struct hfi1_qp_priv *priv = qp->priv;196 197	p->qp = (RVT_KDETH_QP_PREFIX << 16) | priv->rcd->ctxt;198	p->max_len = TID_RDMA_MAX_SEGMENT_SIZE;199	p->jkey = priv->rcd->jkey;200	p->max_read = TID_RDMA_MAX_READ_SEGS_PER_REQ;201	p->max_write = TID_RDMA_MAX_WRITE_SEGS_PER_REQ;202	p->timeout = qp->timeout;203	p->urg = is_urg_masked(priv->rcd);204}205 206bool tid_rdma_conn_req(struct rvt_qp *qp, u64 *data)207{208	struct hfi1_qp_priv *priv = qp->priv;209 210	*data = tid_rdma_opfn_encode(&priv->tid_rdma.local);211	return true;212}213 214bool tid_rdma_conn_reply(struct rvt_qp *qp, u64 data)215{216	struct hfi1_qp_priv *priv = qp->priv;217	struct tid_rdma_params *remote, *old;218	bool ret = true;219 220	old = rcu_dereference_protected(priv->tid_rdma.remote,221					lockdep_is_held(&priv->opfn.lock));222	data &= ~0xfULL;223	/*224	 * If data passed in is zero, return true so as not to continue the225	 * negotiation process226	 */227	if (!data || !HFI1_CAP_IS_KSET(TID_RDMA))228		goto null;229	/*230	 * If kzalloc fails, return false. This will result in:231	 * * at the requester a new OPFN request being generated to retry232	 *   the negotiation233	 * * at the responder, 0 being returned to the requester so as to234	 *   disable TID RDMA at both the requester and the responder235	 */236	remote = kzalloc(sizeof(*remote), GFP_ATOMIC);237	if (!remote) {238		ret = false;239		goto null;240	}241 242	tid_rdma_opfn_decode(remote, data);243	priv->tid_timer_timeout_jiffies =244		usecs_to_jiffies((((4096UL * (1UL << remote->timeout)) /245				   1000UL) << 3) * 7);246	trace_hfi1_opfn_param(qp, 0, &priv->tid_rdma.local);247	trace_hfi1_opfn_param(qp, 1, remote);248	rcu_assign_pointer(priv->tid_rdma.remote, remote);249	/*250	 * A TID RDMA READ request's segment size is not equal to251	 * remote->max_len only when the request's data length is smaller252	 * than remote->max_len. In that case, there will be only one segment.253	 * Therefore, when priv->pkts_ps is used to calculate req->cur_seg254	 * during retry, it will lead to req->cur_seg = 0, which is exactly255	 * what is expected.256	 */257	priv->pkts_ps = (u16)rvt_div_mtu(qp, remote->max_len);258	priv->timeout_shift = ilog2(priv->pkts_ps - 1) + 1;259	goto free;260null:261	RCU_INIT_POINTER(priv->tid_rdma.remote, NULL);262	priv->timeout_shift = 0;263free:264	if (old)265		kfree_rcu(old, rcu_head);266	return ret;267}268 269bool tid_rdma_conn_resp(struct rvt_qp *qp, u64 *data)270{271	bool ret;272 273	ret = tid_rdma_conn_reply(qp, *data);274	*data = 0;275	/*276	 * If tid_rdma_conn_reply() returns error, set *data as 0 to indicate277	 * TID RDMA could not be enabled. This will result in TID RDMA being278	 * disabled at the requester too.279	 */280	if (ret)281		(void)tid_rdma_conn_req(qp, data);282	return ret;283}284 285void tid_rdma_conn_error(struct rvt_qp *qp)286{287	struct hfi1_qp_priv *priv = qp->priv;288	struct tid_rdma_params *old;289 290	old = rcu_dereference_protected(priv->tid_rdma.remote,291					lockdep_is_held(&priv->opfn.lock));292	RCU_INIT_POINTER(priv->tid_rdma.remote, NULL);293	if (old)294		kfree_rcu(old, rcu_head);295}296 297/* This is called at context initialization time */298int hfi1_kern_exp_rcv_init(struct hfi1_ctxtdata *rcd, int reinit)299{300	if (reinit)301		return 0;302 303	BUILD_BUG_ON(TID_RDMA_JKEY < HFI1_KERNEL_MIN_JKEY);304	BUILD_BUG_ON(TID_RDMA_JKEY > HFI1_KERNEL_MAX_JKEY);305	rcd->jkey = TID_RDMA_JKEY;306	hfi1_set_ctxt_jkey(rcd->dd, rcd, rcd->jkey);307	return hfi1_alloc_ctxt_rcv_groups(rcd);308}309 310/**311 * qp_to_rcd - determine the receive context used by a qp312 * @rdi: rvt dev struct313 * @qp: the qp314 *315 * This routine returns the receive context associated316 * with a a qp's qpn.317 *318 * Return: the context.319 */320static struct hfi1_ctxtdata *qp_to_rcd(struct rvt_dev_info *rdi,321				       struct rvt_qp *qp)322{323	struct hfi1_ibdev *verbs_dev = container_of(rdi,324						    struct hfi1_ibdev,325						    rdi);326	struct hfi1_devdata *dd = container_of(verbs_dev,327					       struct hfi1_devdata,328					       verbs_dev);329	unsigned int ctxt;330 331	if (qp->ibqp.qp_num == 0)332		ctxt = 0;333	else334		ctxt = hfi1_get_qp_map(dd, qp->ibqp.qp_num >> dd->qos_shift);335	return dd->rcd[ctxt];336}337 338int hfi1_qp_priv_init(struct rvt_dev_info *rdi, struct rvt_qp *qp,339		      struct ib_qp_init_attr *init_attr)340{341	struct hfi1_qp_priv *qpriv = qp->priv;342	int i, ret;343 344	qpriv->rcd = qp_to_rcd(rdi, qp);345 346	spin_lock_init(&qpriv->opfn.lock);347	INIT_WORK(&qpriv->opfn.opfn_work, opfn_send_conn_request);348	INIT_WORK(&qpriv->tid_rdma.trigger_work, tid_rdma_trigger_resume);349	qpriv->flow_state.psn = 0;350	qpriv->flow_state.index = RXE_NUM_TID_FLOWS;351	qpriv->flow_state.last_index = RXE_NUM_TID_FLOWS;352	qpriv->flow_state.generation = KERN_GENERATION_RESERVED;353	qpriv->s_state = TID_OP(WRITE_RESP);354	qpriv->s_tid_cur = HFI1_QP_WQE_INVALID;355	qpriv->s_tid_head = HFI1_QP_WQE_INVALID;356	qpriv->s_tid_tail = HFI1_QP_WQE_INVALID;357	qpriv->rnr_nak_state = TID_RNR_NAK_INIT;358	qpriv->r_tid_head = HFI1_QP_WQE_INVALID;359	qpriv->r_tid_tail = HFI1_QP_WQE_INVALID;360	qpriv->r_tid_ack = HFI1_QP_WQE_INVALID;361	qpriv->r_tid_alloc = HFI1_QP_WQE_INVALID;362	atomic_set(&qpriv->n_requests, 0);363	atomic_set(&qpriv->n_tid_requests, 0);364	timer_setup(&qpriv->s_tid_timer, hfi1_tid_timeout, 0);365	timer_setup(&qpriv->s_tid_retry_timer, hfi1_tid_retry_timeout, 0);366	INIT_LIST_HEAD(&qpriv->tid_wait);367 368	if (init_attr->qp_type == IB_QPT_RC && HFI1_CAP_IS_KSET(TID_RDMA)) {369		struct hfi1_devdata *dd = qpriv->rcd->dd;370 371		qpriv->pages = kzalloc_node(TID_RDMA_MAX_PAGES *372						sizeof(*qpriv->pages),373					    GFP_KERNEL, dd->node);374		if (!qpriv->pages)375			return -ENOMEM;376		for (i = 0; i < qp->s_size; i++) {377			struct hfi1_swqe_priv *priv;378			struct rvt_swqe *wqe = rvt_get_swqe_ptr(qp, i);379 380			priv = kzalloc_node(sizeof(*priv), GFP_KERNEL,381					    dd->node);382			if (!priv)383				return -ENOMEM;384 385			hfi1_init_trdma_req(qp, &priv->tid_req);386			priv->tid_req.e.swqe = wqe;387			wqe->priv = priv;388		}389		for (i = 0; i < rvt_max_atomic(rdi); i++) {390			struct hfi1_ack_priv *priv;391 392			priv = kzalloc_node(sizeof(*priv), GFP_KERNEL,393					    dd->node);394			if (!priv)395				return -ENOMEM;396 397			hfi1_init_trdma_req(qp, &priv->tid_req);398			priv->tid_req.e.ack = &qp->s_ack_queue[i];399 400			ret = hfi1_kern_exp_rcv_alloc_flows(&priv->tid_req,401							    GFP_KERNEL);402			if (ret) {403				kfree(priv);404				return ret;405			}406			qp->s_ack_queue[i].priv = priv;407		}408	}409 410	return 0;411}412 413void hfi1_qp_priv_tid_free(struct rvt_dev_info *rdi, struct rvt_qp *qp)414{415	struct hfi1_qp_priv *qpriv = qp->priv;416	struct rvt_swqe *wqe;417	u32 i;418 419	if (qp->ibqp.qp_type == IB_QPT_RC && HFI1_CAP_IS_KSET(TID_RDMA)) {420		for (i = 0; i < qp->s_size; i++) {421			wqe = rvt_get_swqe_ptr(qp, i);422			kfree(wqe->priv);423			wqe->priv = NULL;424		}425		for (i = 0; i < rvt_max_atomic(rdi); i++) {426			struct hfi1_ack_priv *priv = qp->s_ack_queue[i].priv;427 428			if (priv)429				hfi1_kern_exp_rcv_free_flows(&priv->tid_req);430			kfree(priv);431			qp->s_ack_queue[i].priv = NULL;432		}433		cancel_work_sync(&qpriv->opfn.opfn_work);434		kfree(qpriv->pages);435		qpriv->pages = NULL;436	}437}438 439/* Flow and tid waiter functions */440/**441 * DOC: lock ordering442 *443 * There are two locks involved with the queuing444 * routines: the qp s_lock and the exp_lock.445 *446 * Since the tid space allocation is called from447 * the send engine, the qp s_lock is already held.448 *449 * The allocation routines will get the exp_lock.450 *451 * The first_qp() call is provided to allow the head of452 * the rcd wait queue to be fetched under the exp_lock and453 * followed by a drop of the exp_lock.454 *455 * Any qp in the wait list will have the qp reference count held456 * to hold the qp in memory.457 */458 459/*460 * return head of rcd wait list461 *462 * Must hold the exp_lock.463 *464 * Get a reference to the QP to hold the QP in memory.465 *466 * The caller must release the reference when the local467 * is no longer being used.468 */469static struct rvt_qp *first_qp(struct hfi1_ctxtdata *rcd,470			       struct tid_queue *queue)471	__must_hold(&rcd->exp_lock)472{473	struct hfi1_qp_priv *priv;474 475	lockdep_assert_held(&rcd->exp_lock);476	priv = list_first_entry_or_null(&queue->queue_head,477					struct hfi1_qp_priv,478					tid_wait);479	if (!priv)480		return NULL;481	rvt_get_qp(priv->owner);482	return priv->owner;483}484 485/**486 * kernel_tid_waiters - determine rcd wait487 * @rcd: the receive context488 * @queue: the queue to operate on489 * @qp: the head of the qp being processed490 *491 * This routine will return false IFF492 * the list is NULL or the head of the493 * list is the indicated qp.494 *495 * Must hold the qp s_lock and the exp_lock.496 *497 * Return:498 * false if either of the conditions below are satisfied:499 * 1. The list is empty or500 * 2. The indicated qp is at the head of the list and the501 *    HFI1_S_WAIT_TID_SPACE bit is set in qp->s_flags.502 * true is returned otherwise.503 */504static bool kernel_tid_waiters(struct hfi1_ctxtdata *rcd,505			       struct tid_queue *queue, struct rvt_qp *qp)506	__must_hold(&rcd->exp_lock) __must_hold(&qp->s_lock)507{508	struct rvt_qp *fqp;509	bool ret = true;510 511	lockdep_assert_held(&qp->s_lock);512	lockdep_assert_held(&rcd->exp_lock);513	fqp = first_qp(rcd, queue);514	if (!fqp || (fqp == qp && (qp->s_flags & HFI1_S_WAIT_TID_SPACE)))515		ret = false;516	rvt_put_qp(fqp);517	return ret;518}519 520/**521 * dequeue_tid_waiter - dequeue the qp from the list522 * @rcd: the receive context523 * @queue: the queue to operate on524 * @qp: the qp to remove the wait list525 *526 * This routine removes the indicated qp from the527 * wait list if it is there.528 *529 * This should be done after the hardware flow and530 * tid array resources have been allocated.531 *532 * Must hold the qp s_lock and the rcd exp_lock.533 *534 * It assumes the s_lock to protect the s_flags535 * field and to reliably test the HFI1_S_WAIT_TID_SPACE flag.536 */537static void dequeue_tid_waiter(struct hfi1_ctxtdata *rcd,538			       struct tid_queue *queue, struct rvt_qp *qp)539	__must_hold(&rcd->exp_lock) __must_hold(&qp->s_lock)540{541	struct hfi1_qp_priv *priv = qp->priv;542 543	lockdep_assert_held(&qp->s_lock);544	lockdep_assert_held(&rcd->exp_lock);545	if (list_empty(&priv->tid_wait))546		return;547	list_del_init(&priv->tid_wait);548	qp->s_flags &= ~HFI1_S_WAIT_TID_SPACE;549	queue->dequeue++;550	rvt_put_qp(qp);551}552 553/**554 * queue_qp_for_tid_wait - suspend QP on tid space555 * @rcd: the receive context556 * @queue: the queue to operate on557 * @qp: the qp558 *559 * The qp is inserted at the tail of the rcd560 * wait queue and the HFI1_S_WAIT_TID_SPACE s_flag is set.561 *562 * Must hold the qp s_lock and the exp_lock.563 */564static void queue_qp_for_tid_wait(struct hfi1_ctxtdata *rcd,565				  struct tid_queue *queue, struct rvt_qp *qp)566	__must_hold(&rcd->exp_lock) __must_hold(&qp->s_lock)567{568	struct hfi1_qp_priv *priv = qp->priv;569 570	lockdep_assert_held(&qp->s_lock);571	lockdep_assert_held(&rcd->exp_lock);572	if (list_empty(&priv->tid_wait)) {573		qp->s_flags |= HFI1_S_WAIT_TID_SPACE;574		list_add_tail(&priv->tid_wait, &queue->queue_head);575		priv->tid_enqueue = ++queue->enqueue;576		rcd->dd->verbs_dev.n_tidwait++;577		trace_hfi1_qpsleep(qp, HFI1_S_WAIT_TID_SPACE);578		rvt_get_qp(qp);579	}580}581 582/**583 * __trigger_tid_waiter - trigger tid waiter584 * @qp: the qp585 *586 * This is a private entrance to schedule the qp587 * assuming the caller is holding the qp->s_lock.588 */589static void __trigger_tid_waiter(struct rvt_qp *qp)590	__must_hold(&qp->s_lock)591{592	lockdep_assert_held(&qp->s_lock);593	if (!(qp->s_flags & HFI1_S_WAIT_TID_SPACE))594		return;595	trace_hfi1_qpwakeup(qp, HFI1_S_WAIT_TID_SPACE);596	hfi1_schedule_send(qp);597}598 599/**600 * tid_rdma_schedule_tid_wakeup - schedule wakeup for a qp601 * @qp: the qp602 *603 * trigger a schedule or a waiting qp in a deadlock604 * safe manner.  The qp reference is held prior605 * to this call via first_qp().606 *607 * If the qp trigger was already scheduled (!rval)608 * the reference is dropped, otherwise the resume609 * or the destroy cancel will dispatch the reference.610 */611static void tid_rdma_schedule_tid_wakeup(struct rvt_qp *qp)612{613	struct hfi1_qp_priv *priv;614	struct hfi1_ibport *ibp;615	struct hfi1_pportdata *ppd;616	struct hfi1_devdata *dd;617	bool rval;618 619	if (!qp)620		return;621 622	priv = qp->priv;623	ibp = to_iport(qp->ibqp.device, qp->port_num);624	ppd = ppd_from_ibp(ibp);625	dd = dd_from_ibdev(qp->ibqp.device);626 627	rval = queue_work_on(priv->s_sde ?628			     priv->s_sde->cpu :629			     cpumask_first(cpumask_of_node(dd->node)),630			     ppd->hfi1_wq,631			     &priv->tid_rdma.trigger_work);632	if (!rval)633		rvt_put_qp(qp);634}635 636/**637 * tid_rdma_trigger_resume - field a trigger work request638 * @work: the work item639 *640 * Complete the off qp trigger processing by directly641 * calling the progress routine.642 */643static void tid_rdma_trigger_resume(struct work_struct *work)644{645	struct tid_rdma_qp_params *tr;646	struct hfi1_qp_priv *priv;647	struct rvt_qp *qp;648 649	tr = container_of(work, struct tid_rdma_qp_params, trigger_work);650	priv = container_of(tr, struct hfi1_qp_priv, tid_rdma);651	qp = priv->owner;652	spin_lock_irq(&qp->s_lock);653	if (qp->s_flags & HFI1_S_WAIT_TID_SPACE) {654		spin_unlock_irq(&qp->s_lock);655		hfi1_do_send(priv->owner, true);656	} else {657		spin_unlock_irq(&qp->s_lock);658	}659	rvt_put_qp(qp);660}661 662/*663 * tid_rdma_flush_wait - unwind any tid space wait664 *665 * This is called when resetting a qp to666 * allow a destroy or reset to get rid667 * of any tid space linkage and reference counts.668 */669static void _tid_rdma_flush_wait(struct rvt_qp *qp, struct tid_queue *queue)670	__must_hold(&qp->s_lock)671{672	struct hfi1_qp_priv *priv;673 674	if (!qp)675		return;676	lockdep_assert_held(&qp->s_lock);677	priv = qp->priv;678	qp->s_flags &= ~HFI1_S_WAIT_TID_SPACE;679	spin_lock(&priv->rcd->exp_lock);680	if (!list_empty(&priv->tid_wait)) {681		list_del_init(&priv->tid_wait);682		qp->s_flags &= ~HFI1_S_WAIT_TID_SPACE;683		queue->dequeue++;684		rvt_put_qp(qp);685	}686	spin_unlock(&priv->rcd->exp_lock);687}688 689void hfi1_tid_rdma_flush_wait(struct rvt_qp *qp)690	__must_hold(&qp->s_lock)691{692	struct hfi1_qp_priv *priv = qp->priv;693 694	_tid_rdma_flush_wait(qp, &priv->rcd->flow_queue);695	_tid_rdma_flush_wait(qp, &priv->rcd->rarr_queue);696}697 698/* Flow functions */699/**700 * kern_reserve_flow - allocate a hardware flow701 * @rcd: the context to use for allocation702 * @last: the index of the preferred flow. Use RXE_NUM_TID_FLOWS to703 *         signify "don't care".704 *705 * Use a bit mask based allocation to reserve a hardware706 * flow for use in receiving KDETH data packets. If a preferred flow is707 * specified the function will attempt to reserve that flow again, if708 * available.709 *710 * The exp_lock must be held.711 *712 * Return:713 * On success: a value positive value between 0 and RXE_NUM_TID_FLOWS - 1714 * On failure: -EAGAIN715 */716static int kern_reserve_flow(struct hfi1_ctxtdata *rcd, int last)717	__must_hold(&rcd->exp_lock)718{719	int nr;720 721	/* Attempt to reserve the preferred flow index */722	if (last >= 0 && last < RXE_NUM_TID_FLOWS &&723	    !test_and_set_bit(last, &rcd->flow_mask))724		return last;725 726	nr = ffz(rcd->flow_mask);727	BUILD_BUG_ON(RXE_NUM_TID_FLOWS >=728		     (sizeof(rcd->flow_mask) * BITS_PER_BYTE));729	if (nr > (RXE_NUM_TID_FLOWS - 1))730		return -EAGAIN;731	set_bit(nr, &rcd->flow_mask);732	return nr;733}734 735static void kern_set_hw_flow(struct hfi1_ctxtdata *rcd, u32 generation,736			     u32 flow_idx)737{738	u64 reg;739 740	reg = ((u64)generation << HFI1_KDETH_BTH_SEQ_SHIFT) |741		RCV_TID_FLOW_TABLE_CTRL_FLOW_VALID_SMASK |742		RCV_TID_FLOW_TABLE_CTRL_KEEP_AFTER_SEQ_ERR_SMASK |743		RCV_TID_FLOW_TABLE_CTRL_KEEP_ON_GEN_ERR_SMASK |744		RCV_TID_FLOW_TABLE_STATUS_SEQ_MISMATCH_SMASK |745		RCV_TID_FLOW_TABLE_STATUS_GEN_MISMATCH_SMASK;746 747	if (generation != KERN_GENERATION_RESERVED)748		reg |= RCV_TID_FLOW_TABLE_CTRL_HDR_SUPP_EN_SMASK;749 750	write_uctxt_csr(rcd->dd, rcd->ctxt,751			RCV_TID_FLOW_TABLE + 8 * flow_idx, reg);752}753 754static u32 kern_setup_hw_flow(struct hfi1_ctxtdata *rcd, u32 flow_idx)755	__must_hold(&rcd->exp_lock)756{757	u32 generation = rcd->flows[flow_idx].generation;758 759	kern_set_hw_flow(rcd, generation, flow_idx);760	return generation;761}762 763static u32 kern_flow_generation_next(u32 gen)764{765	u32 generation = mask_generation(gen + 1);766 767	if (generation == KERN_GENERATION_RESERVED)768		generation = mask_generation(generation + 1);769	return generation;770}771 772static void kern_clear_hw_flow(struct hfi1_ctxtdata *rcd, u32 flow_idx)773	__must_hold(&rcd->exp_lock)774{775	rcd->flows[flow_idx].generation =776		kern_flow_generation_next(rcd->flows[flow_idx].generation);777	kern_set_hw_flow(rcd, KERN_GENERATION_RESERVED, flow_idx);778}779 780int hfi1_kern_setup_hw_flow(struct hfi1_ctxtdata *rcd, struct rvt_qp *qp)781{782	struct hfi1_qp_priv *qpriv = (struct hfi1_qp_priv *)qp->priv;783	struct tid_flow_state *fs = &qpriv->flow_state;784	struct rvt_qp *fqp;785	unsigned long flags;786	int ret = 0;787 788	/* The QP already has an allocated flow */789	if (fs->index != RXE_NUM_TID_FLOWS)790		return ret;791 792	spin_lock_irqsave(&rcd->exp_lock, flags);793	if (kernel_tid_waiters(rcd, &rcd->flow_queue, qp))794		goto queue;795 796	ret = kern_reserve_flow(rcd, fs->last_index);797	if (ret < 0)798		goto queue;799	fs->index = ret;800	fs->last_index = fs->index;801 802	/* Generation received in a RESYNC overrides default flow generation */803	if (fs->generation != KERN_GENERATION_RESERVED)804		rcd->flows[fs->index].generation = fs->generation;805	fs->generation = kern_setup_hw_flow(rcd, fs->index);806	fs->psn = 0;807	dequeue_tid_waiter(rcd, &rcd->flow_queue, qp);808	/* get head before dropping lock */809	fqp = first_qp(rcd, &rcd->flow_queue);810	spin_unlock_irqrestore(&rcd->exp_lock, flags);811 812	tid_rdma_schedule_tid_wakeup(fqp);813	return 0;814queue:815	queue_qp_for_tid_wait(rcd, &rcd->flow_queue, qp);816	spin_unlock_irqrestore(&rcd->exp_lock, flags);817	return -EAGAIN;818}819 820void hfi1_kern_clear_hw_flow(struct hfi1_ctxtdata *rcd, struct rvt_qp *qp)821{822	struct hfi1_qp_priv *qpriv = (struct hfi1_qp_priv *)qp->priv;823	struct tid_flow_state *fs = &qpriv->flow_state;824	struct rvt_qp *fqp;825	unsigned long flags;826 827	if (fs->index >= RXE_NUM_TID_FLOWS)828		return;829	spin_lock_irqsave(&rcd->exp_lock, flags);830	kern_clear_hw_flow(rcd, fs->index);831	clear_bit(fs->index, &rcd->flow_mask);832	fs->index = RXE_NUM_TID_FLOWS;833	fs->psn = 0;834	fs->generation = KERN_GENERATION_RESERVED;835 836	/* get head before dropping lock */837	fqp = first_qp(rcd, &rcd->flow_queue);838	spin_unlock_irqrestore(&rcd->exp_lock, flags);839 840	if (fqp == qp) {841		__trigger_tid_waiter(fqp);842		rvt_put_qp(fqp);843	} else {844		tid_rdma_schedule_tid_wakeup(fqp);845	}846}847 848void hfi1_kern_init_ctxt_generations(struct hfi1_ctxtdata *rcd)849{850	int i;851 852	for (i = 0; i < RXE_NUM_TID_FLOWS; i++) {853		rcd->flows[i].generation = mask_generation(get_random_u32());854		kern_set_hw_flow(rcd, KERN_GENERATION_RESERVED, i);855	}856}857 858/* TID allocation functions */859static u8 trdma_pset_order(struct tid_rdma_pageset *s)860{861	u8 count = s->count;862 863	return ilog2(count) + 1;864}865 866/**867 * tid_rdma_find_phys_blocks_4k - get groups base on mr info868 * @flow: overall info for a TID RDMA segment869 * @pages: pointer to an array of page structs870 * @npages: number of pages871 * @list: page set array to return872 *873 * This routine returns the number of groups associated with874 * the current sge information.  This implementation is based875 * on the expected receive find_phys_blocks() adjusted to876 * use the MR information vs. the pfn.877 *878 * Return:879 * the number of RcvArray entries880 */881static u32 tid_rdma_find_phys_blocks_4k(struct tid_rdma_flow *flow,882					struct page **pages,883					u32 npages,884					struct tid_rdma_pageset *list)885{886	u32 pagecount, pageidx, setcount = 0, i;887	void *vaddr, *this_vaddr;888 889	if (!npages)890		return 0;891 892	/*893	 * Look for sets of physically contiguous pages in the user buffer.894	 * This will allow us to optimize Expected RcvArray entry usage by895	 * using the bigger supported sizes.896	 */897	vaddr = page_address(pages[0]);898	trace_hfi1_tid_flow_page(flow->req->qp, flow, 0, 0, 0, vaddr);899	for (pageidx = 0, pagecount = 1, i = 1; i <= npages; i++) {900		this_vaddr = i < npages ? page_address(pages[i]) : NULL;901		trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 0, 0,902					 this_vaddr);903		/*904		 * If the vaddr's are not sequential, pages are not physically905		 * contiguous.906		 */907		if (this_vaddr != (vaddr + PAGE_SIZE)) {908			/*909			 * At this point we have to loop over the set of910			 * physically contiguous pages and break them down it911			 * sizes supported by the HW.912			 * There are two main constraints:913			 *     1. The max buffer size is MAX_EXPECTED_BUFFER.914			 *        If the total set size is bigger than that915			 *        program only a MAX_EXPECTED_BUFFER chunk.916			 *     2. The buffer size has to be a power of two. If917			 *        it is not, round down to the closes power of918			 *        2 and program that size.919			 */920			while (pagecount) {921				int maxpages = pagecount;922				u32 bufsize = pagecount * PAGE_SIZE;923 924				if (bufsize > MAX_EXPECTED_BUFFER)925					maxpages =926						MAX_EXPECTED_BUFFER >>927						PAGE_SHIFT;928				else if (!is_power_of_2(bufsize))929					maxpages =930						rounddown_pow_of_two(bufsize) >>931						PAGE_SHIFT;932 933				list[setcount].idx = pageidx;934				list[setcount].count = maxpages;935				trace_hfi1_tid_pageset(flow->req->qp, setcount,936						       list[setcount].idx,937						       list[setcount].count);938				pagecount -= maxpages;939				pageidx += maxpages;940				setcount++;941			}942			pageidx = i;943			pagecount = 1;944			vaddr = this_vaddr;945		} else {946			vaddr += PAGE_SIZE;947			pagecount++;948		}949	}950	/* insure we always return an even number of sets */951	if (setcount & 1)952		list[setcount++].count = 0;953	return setcount;954}955 956/**957 * tid_flush_pages - dump out pages into pagesets958 * @list: list of pagesets959 * @idx: pointer to current page index960 * @pages: number of pages to dump961 * @sets: current number of pagesset962 *963 * This routine flushes out accumuated pages.964 *965 * To insure an even number of sets the966 * code may add a filler.967 *968 * This can happen with when pages is not969 * a power of 2 or pages is a power of 2970 * less than the maximum pages.971 *972 * Return:973 * The new number of sets974 */975 976static u32 tid_flush_pages(struct tid_rdma_pageset *list,977			   u32 *idx, u32 pages, u32 sets)978{979	while (pages) {980		u32 maxpages = pages;981 982		if (maxpages > MAX_EXPECTED_PAGES)983			maxpages = MAX_EXPECTED_PAGES;984		else if (!is_power_of_2(maxpages))985			maxpages = rounddown_pow_of_two(maxpages);986		list[sets].idx = *idx;987		list[sets++].count = maxpages;988		*idx += maxpages;989		pages -= maxpages;990	}991	/* might need a filler */992	if (sets & 1)993		list[sets++].count = 0;994	return sets;995}996 997/**998 * tid_rdma_find_phys_blocks_8k - get groups base on mr info999 * @flow: overall info for a TID RDMA segment1000 * @pages: pointer to an array of page structs1001 * @npages: number of pages1002 * @list: page set array to return1003 *1004 * This routine parses an array of pages to compute pagesets1005 * in an 8k compatible way.1006 *1007 * pages are tested two at a time, i, i + 1 for contiguous1008 * pages and i - 1 and i contiguous pages.1009 *1010 * If any condition is false, any accumulated pages are flushed and1011 * v0,v1 are emitted as separate PAGE_SIZE pagesets1012 *1013 * Otherwise, the current 8k is totaled for a future flush.1014 *1015 * Return:1016 * The number of pagesets1017 * list set with the returned number of pagesets1018 *1019 */1020static u32 tid_rdma_find_phys_blocks_8k(struct tid_rdma_flow *flow,1021					struct page **pages,1022					u32 npages,1023					struct tid_rdma_pageset *list)1024{1025	u32 idx, sets = 0, i;1026	u32 pagecnt = 0;1027	void *v0, *v1, *vm1;1028 1029	if (!npages)1030		return 0;1031	for (idx = 0, i = 0, vm1 = NULL; i < npages; i += 2) {1032		/* get a new v0 */1033		v0 = page_address(pages[i]);1034		trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 1, 0, v0);1035		v1 = i + 1 < npages ?1036				page_address(pages[i + 1]) : NULL;1037		trace_hfi1_tid_flow_page(flow->req->qp, flow, i, 1, 1, v1);1038		/* compare i, i + 1 vaddr */1039		if (v1 != (v0 + PAGE_SIZE)) {1040			/* flush out pages */1041			sets = tid_flush_pages(list, &idx, pagecnt, sets);1042			/* output v0,v1 as two pagesets */1043			list[sets].idx = idx++;1044			list[sets++].count = 1;1045			if (v1) {1046				list[sets].count = 1;1047				list[sets++].idx = idx++;1048			} else {1049				list[sets++].count = 0;1050			}1051			vm1 = NULL;1052			pagecnt = 0;1053			continue;1054		}1055		/* i,i+1 consecutive, look at i-1,i */1056		if (vm1 && v0 != (vm1 + PAGE_SIZE)) {1057			/* flush out pages */1058			sets = tid_flush_pages(list, &idx, pagecnt, sets);1059			pagecnt = 0;1060		}1061		/* pages will always be a multiple of 8k */1062		pagecnt += 2;1063		/* save i-1 */1064		vm1 = v1;1065		/* move to next pair */1066	}1067	/* dump residual pages at end */1068	sets = tid_flush_pages(list, &idx, npages - idx, sets);1069	/* by design cannot be odd sets */1070	WARN_ON(sets & 1);1071	return sets;1072}1073 1074/*1075 * Find pages for one segment of a sge array represented by @ss. The function1076 * does not check the sge, the sge must have been checked for alignment with a1077 * prior call to hfi1_kern_trdma_ok. Other sge checking is done as part of1078 * rvt_lkey_ok and rvt_rkey_ok. Also, the function only modifies the local sge1079 * copy maintained in @ss->sge, the original sge is not modified.1080 *1081 * Unlike IB RDMA WRITE, we can't decrement ss->num_sge here because we are not1082 * releasing the MR reference count at the same time. Otherwise, we'll "leak"1083 * references to the MR. This difference requires that we keep track of progress1084 * into the sg_list. This is done by the cur_seg cursor in the tid_rdma_request1085 * structure.1086 */1087static u32 kern_find_pages(struct tid_rdma_flow *flow,1088			   struct page **pages,1089			   struct rvt_sge_state *ss, bool *last)1090{1091	struct tid_rdma_request *req = flow->req;1092	struct rvt_sge *sge = &ss->sge;1093	u32 length = flow->req->seg_len;1094	u32 len = PAGE_SIZE;1095	u32 i = 0;1096 1097	while (length && req->isge < ss->num_sge) {1098		pages[i++] = virt_to_page(sge->vaddr);1099 1100		sge->vaddr += len;1101		sge->length -= len;1102		sge->sge_length -= len;1103		if (!sge->sge_length) {1104			if (++req->isge < ss->num_sge)1105				*sge = ss->sg_list[req->isge - 1];1106		} else if (sge->length == 0 && sge->mr->lkey) {1107			if (++sge->n >= RVT_SEGSZ) {1108				++sge->m;1109				sge->n = 0;1110			}1111			sge->vaddr = sge->mr->map[sge->m]->segs[sge->n].vaddr;1112			sge->length = sge->mr->map[sge->m]->segs[sge->n].length;1113		}1114		length -= len;1115	}1116 1117	flow->length = flow->req->seg_len - length;1118	*last = req->isge != ss->num_sge;1119	return i;1120}1121 1122static void dma_unmap_flow(struct tid_rdma_flow *flow)1123{1124	struct hfi1_devdata *dd;1125	int i;1126	struct tid_rdma_pageset *pset;1127 1128	dd = flow->req->rcd->dd;1129	for (i = 0, pset = &flow->pagesets[0]; i < flow->npagesets;1130			i++, pset++) {1131		if (pset->count && pset->addr) {1132			dma_unmap_page(&dd->pcidev->dev,1133				       pset->addr,1134				       PAGE_SIZE * pset->count,1135				       DMA_FROM_DEVICE);1136			pset->mapped = 0;1137		}1138	}1139}1140 1141static int dma_map_flow(struct tid_rdma_flow *flow, struct page **pages)1142{1143	int i;1144	struct hfi1_devdata *dd = flow->req->rcd->dd;1145	struct tid_rdma_pageset *pset;1146 1147	for (i = 0, pset = &flow->pagesets[0]; i < flow->npagesets;1148			i++, pset++) {1149		if (pset->count) {1150			pset->addr = dma_map_page(&dd->pcidev->dev,1151						  pages[pset->idx],1152						  0,1153						  PAGE_SIZE * pset->count,1154						  DMA_FROM_DEVICE);1155 1156			if (dma_mapping_error(&dd->pcidev->dev, pset->addr)) {1157				dma_unmap_flow(flow);1158				return -ENOMEM;1159			}1160			pset->mapped = 1;1161		}1162	}1163	return 0;1164}1165 1166static inline bool dma_mapped(struct tid_rdma_flow *flow)1167{1168	return !!flow->pagesets[0].mapped;1169}1170 1171/*1172 * Get pages pointers and identify contiguous physical memory chunks for a1173 * segment. All segments are of length flow->req->seg_len.1174 */1175static int kern_get_phys_blocks(struct tid_rdma_flow *flow,1176				struct page **pages,1177				struct rvt_sge_state *ss, bool *last)1178{1179	u8 npages;1180 1181	/* Reuse previously computed pagesets, if any */1182	if (flow->npagesets) {1183		trace_hfi1_tid_flow_alloc(flow->req->qp, flow->req->setup_head,1184					  flow);1185		if (!dma_mapped(flow))1186			return dma_map_flow(flow, pages);1187		return 0;1188	}1189 1190	npages = kern_find_pages(flow, pages, ss, last);1191 1192	if (flow->req->qp->pmtu == enum_to_mtu(OPA_MTU_4096))1193		flow->npagesets =1194			tid_rdma_find_phys_blocks_4k(flow, pages, npages,1195						     flow->pagesets);1196	else1197		flow->npagesets =1198			tid_rdma_find_phys_blocks_8k(flow, pages, npages,1199						     flow->pagesets);1200 1201	return dma_map_flow(flow, pages);1202}1203 1204static inline void kern_add_tid_node(struct tid_rdma_flow *flow,1205				     struct hfi1_ctxtdata *rcd, char *s,1206				     struct tid_group *grp, u8 cnt)1207{1208	struct kern_tid_node *node = &flow->tnode[flow->tnode_cnt++];1209 1210	WARN_ON_ONCE(flow->tnode_cnt >=1211		     (TID_RDMA_MAX_SEGMENT_SIZE >> PAGE_SHIFT));1212	if (WARN_ON_ONCE(cnt & 1))1213		dd_dev_err(rcd->dd,1214			   "unexpected odd allocation cnt %u map 0x%x used %u",1215			   cnt, grp->map, grp->used);1216 1217	node->grp = grp;1218	node->map = grp->map;1219	node->cnt = cnt;1220	trace_hfi1_tid_node_add(flow->req->qp, s, flow->tnode_cnt - 1,1221				grp->base, grp->map, grp->used, cnt);1222}1223 1224/*1225 * Try to allocate pageset_count TID's from TID groups for a context1226 *1227 * This function allocates TID's without moving groups between lists or1228 * modifying grp->map. This is done as follows, being cogizant of the lists1229 * between which the TID groups will move:1230 * 1. First allocate complete groups of 8 TID's since this is more efficient,1231 *    these groups will move from group->full without affecting used1232 * 2. If more TID's are needed allocate from used (will move from used->full or1233 *    stay in used)1234 * 3. If we still don't have the required number of TID's go back and look again1235 *    at a complete group (will move from group->used)1236 */1237static int kern_alloc_tids(struct tid_rdma_flow *flow)1238{1239	struct hfi1_ctxtdata *rcd = flow->req->rcd;1240	struct hfi1_devdata *dd = rcd->dd;1241	u32 ngroups, pageidx = 0;1242	struct tid_group *group = NULL, *used;1243	u8 use;1244 1245	flow->tnode_cnt = 0;1246	ngroups = flow->npagesets / dd->rcv_entries.group_size;1247	if (!ngroups)1248		goto used_list;1249 1250	/* First look at complete groups */1251	list_for_each_entry(group,  &rcd->tid_group_list.list, list) {1252		kern_add_tid_node(flow, rcd, "complete groups", group,1253				  group->size);1254 1255		pageidx += group->size;1256		if (!--ngroups)1257			break;1258	}1259 1260	if (pageidx >= flow->npagesets)1261		goto ok;1262 1263used_list:1264	/* Now look at partially used groups */1265	list_for_each_entry(used, &rcd->tid_used_list.list, list) {1266		use = min_t(u32, flow->npagesets - pageidx,1267			    used->size - used->used);1268		kern_add_tid_node(flow, rcd, "used groups", used, use);1269 1270		pageidx += use;1271		if (pageidx >= flow->npagesets)1272			goto ok;1273	}1274 1275	/*1276	 * Look again at a complete group, continuing from where we left.1277	 * However, if we are at the head, we have reached the end of the1278	 * complete groups list from the first loop above1279	 */1280	if (group && &group->list == &rcd->tid_group_list.list)1281		goto bail_eagain;1282	group = list_prepare_entry(group, &rcd->tid_group_list.list,1283				   list);1284	if (list_is_last(&group->list, &rcd->tid_group_list.list))1285		goto bail_eagain;1286	group = list_next_entry(group, list);1287	use = min_t(u32, flow->npagesets - pageidx, group->size);1288	kern_add_tid_node(flow, rcd, "complete continue", group, use);1289	pageidx += use;1290	if (pageidx >= flow->npagesets)1291		goto ok;1292bail_eagain:1293	trace_hfi1_msg_alloc_tids(flow->req->qp, " insufficient tids: needed ",1294				  (u64)flow->npagesets);1295	return -EAGAIN;1296ok:1297	return 0;1298}1299 1300static void kern_program_rcv_group(struct tid_rdma_flow *flow, int grp_num,1301				   u32 *pset_idx)1302{1303	struct hfi1_ctxtdata *rcd = flow->req->rcd;1304	struct hfi1_devdata *dd = rcd->dd;1305	struct kern_tid_node *node = &flow->tnode[grp_num];1306	struct tid_group *grp = node->grp;1307	struct tid_rdma_pageset *pset;1308	u32 pmtu_pg = flow->req->qp->pmtu >> PAGE_SHIFT;1309	u32 rcventry, npages = 0, pair = 0, tidctrl;1310	u8 i, cnt = 0;1311 1312	for (i = 0; i < grp->size; i++) {1313		rcventry = grp->base + i;1314 1315		if (node->map & BIT(i) || cnt >= node->cnt) {1316			rcv_array_wc_fill(dd, rcventry);1317			continue;1318		}1319		pset = &flow->pagesets[(*pset_idx)++];1320		if (pset->count) {1321			hfi1_put_tid(dd, rcventry, PT_EXPECTED,1322				     pset->addr, trdma_pset_order(pset));1323		} else {1324			hfi1_put_tid(dd, rcventry, PT_INVALID, 0, 0);1325		}1326		npages += pset->count;1327 1328		rcventry -= rcd->expected_base;1329		tidctrl = pair ? 0x3 : rcventry & 0x1 ? 0x2 : 0x1;1330		/*1331		 * A single TID entry will be used to use a rcvarr pair (with1332		 * tidctrl 0x3), if ALL these are true (a) the bit pos is even1333		 * (b) the group map shows current and the next bits as free1334		 * indicating two consecutive rcvarry entries are available (c)1335		 * we actually need 2 more entries1336		 */1337		pair = !(i & 0x1) && !((node->map >> i) & 0x3) &&1338			node->cnt >= cnt + 2;1339		if (!pair) {1340			if (!pset->count)1341				tidctrl = 0x1;1342			flow->tid_entry[flow->tidcnt++] =1343				EXP_TID_SET(IDX, rcventry >> 1) |1344				EXP_TID_SET(CTRL, tidctrl) |1345				EXP_TID_SET(LEN, npages);1346			trace_hfi1_tid_entry_alloc(/* entry */1347			   flow->req->qp, flow->tidcnt - 1,1348			   flow->tid_entry[flow->tidcnt - 1]);1349 1350			/* Efficient DIV_ROUND_UP(npages, pmtu_pg) */1351			flow->npkts += (npages + pmtu_pg - 1) >> ilog2(pmtu_pg);1352			npages = 0;1353		}1354 1355		if (grp->used == grp->size - 1)1356			tid_group_move(grp, &rcd->tid_used_list,1357				       &rcd->tid_full_list);1358		else if (!grp->used)1359			tid_group_move(grp, &rcd->tid_group_list,1360				       &rcd->tid_used_list);1361 1362		grp->used++;1363		grp->map |= BIT(i);1364		cnt++;1365	}1366}1367 1368static void kern_unprogram_rcv_group(struct tid_rdma_flow *flow, int grp_num)1369{1370	struct hfi1_ctxtdata *rcd = flow->req->rcd;1371	struct hfi1_devdata *dd = rcd->dd;1372	struct kern_tid_node *node = &flow->tnode[grp_num];1373	struct tid_group *grp = node->grp;1374	u32 rcventry;1375	u8 i, cnt = 0;1376 1377	for (i = 0; i < grp->size; i++) {1378		rcventry = grp->base + i;1379 1380		if (node->map & BIT(i) || cnt >= node->cnt) {1381			rcv_array_wc_fill(dd, rcventry);1382			continue;1383		}1384 1385		hfi1_put_tid(dd, rcventry, PT_INVALID, 0, 0);1386 1387		grp->used--;1388		grp->map &= ~BIT(i);1389		cnt++;1390 1391		if (grp->used == grp->size - 1)1392			tid_group_move(grp, &rcd->tid_full_list,1393				       &rcd->tid_used_list);1394		else if (!grp->used)1395			tid_group_move(grp, &rcd->tid_used_list,1396				       &rcd->tid_group_list);1397	}1398	if (WARN_ON_ONCE(cnt & 1)) {1399		struct hfi1_ctxtdata *rcd = flow->req->rcd;1400		struct hfi1_devdata *dd = rcd->dd;1401 1402		dd_dev_err(dd, "unexpected odd free cnt %u map 0x%x used %u",1403			   cnt, grp->map, grp->used);1404	}1405}1406 1407static void kern_program_rcvarray(struct tid_rdma_flow *flow)1408{1409	u32 pset_idx = 0;1410	int i;1411 1412	flow->npkts = 0;1413	flow->tidcnt = 0;1414	for (i = 0; i < flow->tnode_cnt; i++)1415		kern_program_rcv_group(flow, i, &pset_idx);1416	trace_hfi1_tid_flow_alloc(flow->req->qp, flow->req->setup_head, flow);1417}1418 1419/**1420 * hfi1_kern_exp_rcv_setup() - setup TID's and flow for one segment of a1421 * TID RDMA request1422 *1423 * @req: TID RDMA request for which the segment/flow is being set up1424 * @ss: sge state, maintains state across successive segments of a sge1425 * @last: set to true after the last sge segment has been processed1426 *1427 * This function1428 * (1) finds a free flow entry in the flow circular buffer1429 * (2) finds pages and continuous physical chunks constituing one segment1430 *     of an sge1431 * (3) allocates TID group entries for those chunks1432 * (4) programs rcvarray entries in the hardware corresponding to those1433 *     TID's1434 * (5) computes a tidarray with formatted TID entries which can be sent1435 *     to the sender1436 * (6) Reserves and programs HW flows.1437 * (7) It also manages queueing the QP when TID/flow resources are not1438 *     available.1439 *1440 * @req points to struct tid_rdma_request of which the segments are a part. The1441 * function uses qp, rcd and seg_len members of @req. In the absence of errors,1442 * req->flow_idx is the index of the flow which has been prepared in this1443 * invocation of function call. With flow = &req->flows[req->flow_idx],1444 * flow->tid_entry contains the TID array which the sender can use for TID RDMA1445 * sends and flow->npkts contains number of packets required to send the1446 * segment.1447 *1448 * hfi1_check_sge_align should be called prior to calling this function and if1449 * it signals error TID RDMA cannot be used for this sge and this function1450 * should not be called.1451 *1452 * For the queuing, caller must hold the flow->req->qp s_lock from the send1453 * engine and the function will procure the exp_lock.1454 *1455 * Return:1456 * The function returns -EAGAIN if sufficient number of TID/flow resources to1457 * map the segment could not be allocated. In this case the function should be1458 * called again with previous arguments to retry the TID allocation. There are1459 * no other error returns. The function returns 0 on success.1460 */1461int hfi1_kern_exp_rcv_setup(struct tid_rdma_request *req,1462			    struct rvt_sge_state *ss, bool *last)1463	__must_hold(&req->qp->s_lock)1464{1465	struct tid_rdma_flow *flow = &req->flows[req->setup_head];1466	struct hfi1_ctxtdata *rcd = req->rcd;1467	struct hfi1_qp_priv *qpriv = req->qp->priv;1468	unsigned long flags;1469	struct rvt_qp *fqp;1470	u16 clear_tail = req->clear_tail;1471 1472	lockdep_assert_held(&req->qp->s_lock);1473	/*1474	 * We return error if either (a) we don't have space in the flow1475	 * circular buffer, or (b) we already have max entries in the buffer.1476	 * Max entries depend on the type of request we are processing and the1477	 * negotiated TID RDMA parameters.1478	 */1479	if (!CIRC_SPACE(req->setup_head, clear_tail, MAX_FLOWS) ||1480	    CIRC_CNT(req->setup_head, clear_tail, MAX_FLOWS) >=1481	    req->n_flows)1482		return -EINVAL;1483 1484	/*1485	 * Get pages, identify contiguous physical memory chunks for the segment1486	 * If we can not determine a DMA address mapping we will treat it just1487	 * like if we ran out of space above.1488	 */1489	if (kern_get_phys_blocks(flow, qpriv->pages, ss, last)) {1490		hfi1_wait_kmem(flow->req->qp);1491		return -ENOMEM;1492	}1493 1494	spin_lock_irqsave(&rcd->exp_lock, flags);1495	if (kernel_tid_waiters(rcd, &rcd->rarr_queue, flow->req->qp))1496		goto queue;1497 1498	/*1499	 * At this point we know the number of pagesets and hence the number of1500	 * TID's to map the segment. Allocate the TID's from the TID groups. If1501	 * we cannot allocate the required number we exit and try again later1502	 */1503	if (kern_alloc_tids(flow))1504		goto queue;1505	/*1506	 * Finally program the TID entries with the pagesets, compute the1507	 * tidarray and enable the HW flow1508	 */1509	kern_program_rcvarray(flow);1510 1511	/*1512	 * Setup the flow state with relevant information.1513	 * This information is used for tracking the sequence of data packets1514	 * for the segment.1515	 * The flow is setup here as this is the most accurate time and place1516	 * to do so. Doing at a later time runs the risk of the flow data in1517	 * qpriv getting out of sync.1518	 */1519	memset(&flow->flow_state, 0x0, sizeof(flow->flow_state));1520	flow->idx = qpriv->flow_state.index;1521	flow->flow_state.generation = qpriv->flow_state.generation;1522	flow->flow_state.spsn = qpriv->flow_state.psn;1523	flow->flow_state.lpsn = flow->flow_state.spsn + flow->npkts - 1;1524	flow->flow_state.r_next_psn =1525		full_flow_psn(flow, flow->flow_state.spsn);1526	qpriv->flow_state.psn += flow->npkts;1527 1528	dequeue_tid_waiter(rcd, &rcd->rarr_queue, flow->req->qp);1529	/* get head before dropping lock */1530	fqp = first_qp(rcd, &rcd->rarr_queue);1531	spin_unlock_irqrestore(&rcd->exp_lock, flags);1532	tid_rdma_schedule_tid_wakeup(fqp);1533 1534	req->setup_head = (req->setup_head + 1) & (MAX_FLOWS - 1);1535	return 0;1536queue:1537	queue_qp_for_tid_wait(rcd, &rcd->rarr_queue, flow->req->qp);1538	spin_unlock_irqrestore(&rcd->exp_lock, flags);1539	return -EAGAIN;1540}1541 1542static void hfi1_tid_rdma_reset_flow(struct tid_rdma_flow *flow)1543{1544	flow->npagesets = 0;1545}1546 1547/*1548 * This function is called after one segment has been successfully sent to1549 * release the flow and TID HW/SW resources for that segment. The segments for a1550 * TID RDMA request are setup and cleared in FIFO order which is managed using a1551 * circular buffer.1552 */1553int hfi1_kern_exp_rcv_clear(struct tid_rdma_request *req)1554	__must_hold(&req->qp->s_lock)1555{1556	struct tid_rdma_flow *flow = &req->flows[req->clear_tail];1557	struct hfi1_ctxtdata *rcd = req->rcd;1558	unsigned long flags;1559	int i;1560	struct rvt_qp *fqp;1561 1562	lockdep_assert_held(&req->qp->s_lock);1563	/* Exit if we have nothing in the flow circular buffer */1564	if (!CIRC_CNT(req->setup_head, req->clear_tail, MAX_FLOWS))1565		return -EINVAL;1566 1567	spin_lock_irqsave(&rcd->exp_lock, flags);1568 1569	for (i = 0; i < flow->tnode_cnt; i++)1570		kern_unprogram_rcv_group(flow, i);1571	/* To prevent double unprogramming */1572	flow->tnode_cnt = 0;1573	/* get head before dropping lock */1574	fqp = first_qp(rcd, &rcd->rarr_queue);1575	spin_unlock_irqrestore(&rcd->exp_lock, flags);1576 1577	dma_unmap_flow(flow);1578 1579	hfi1_tid_rdma_reset_flow(flow);1580	req->clear_tail = (req->clear_tail + 1) & (MAX_FLOWS - 1);1581 1582	if (fqp == req->qp) {1583		__trigger_tid_waiter(fqp);1584		rvt_put_qp(fqp);1585	} else {1586		tid_rdma_schedule_tid_wakeup(fqp);1587	}1588 1589	return 0;1590}1591 1592/*1593 * This function is called to release all the tid entries for1594 * a request.1595 */1596void hfi1_kern_exp_rcv_clear_all(struct tid_rdma_request *req)1597	__must_hold(&req->qp->s_lock)1598{1599	/* Use memory barrier for proper ordering */1600	while (CIRC_CNT(req->setup_head, req->clear_tail, MAX_FLOWS)) {1601		if (hfi1_kern_exp_rcv_clear(req))1602			break;1603	}1604}1605 1606/**1607 * hfi1_kern_exp_rcv_free_flows - free previously allocated flow information1608 * @req: the tid rdma request to be cleaned1609 */1610static void hfi1_kern_exp_rcv_free_flows(struct tid_rdma_request *req)1611{1612	kfree(req->flows);1613	req->flows = NULL;1614}1615 1616/**1617 * __trdma_clean_swqe - clean up for large sized QPs1618 * @qp: the queue patch1619 * @wqe: the send wqe1620 */1621void __trdma_clean_swqe(struct rvt_qp *qp, struct rvt_swqe *wqe)1622{1623	struct hfi1_swqe_priv *p = wqe->priv;1624 1625	hfi1_kern_exp_rcv_free_flows(&p->tid_req);1626}1627 1628/*1629 * This can be called at QP create time or in the data path.1630 */1631static int hfi1_kern_exp_rcv_alloc_flows(struct tid_rdma_request *req,1632					 gfp_t gfp)1633{1634	struct tid_rdma_flow *flows;1635	int i;1636 1637	if (likely(req->flows))1638		return 0;1639	flows = kmalloc_node(MAX_FLOWS * sizeof(*flows), gfp,1640			     req->rcd->numa_id);1641	if (!flows)1642		return -ENOMEM;1643	/* mini init */1644	for (i = 0; i < MAX_FLOWS; i++) {1645		flows[i].req = req;1646		flows[i].npagesets = 0;1647		flows[i].pagesets[0].mapped =  0;1648		flows[i].resync_npkts = 0;1649	}1650	req->flows = flows;1651	return 0;1652}1653 1654static void hfi1_init_trdma_req(struct rvt_qp *qp,1655				struct tid_rdma_request *req)1656{1657	struct hfi1_qp_priv *qpriv = qp->priv;1658 1659	/*1660	 * Initialize various TID RDMA request variables.1661	 * These variables are "static", which is why they1662	 * can be pre-initialized here before the WRs has1663	 * even been submitted.1664	 * However, non-NULL values for these variables do not1665	 * imply that this WQE has been enabled for TID RDMA.1666	 * Drivers should check the WQE's opcode to determine1667	 * if a request is a TID RDMA one or not.1668	 */1669	req->qp = qp;1670	req->rcd = qpriv->rcd;1671}1672 1673u64 hfi1_access_sw_tid_wait(const struct cntr_entry *entry,1674			    void *context, int vl, int mode, u64 data)1675{1676	struct hfi1_devdata *dd = context;1677 1678	return dd->verbs_dev.n_tidwait;1679}1680 1681static struct tid_rdma_flow *find_flow_ib(struct tid_rdma_request *req,1682					  u32 psn, u16 *fidx)1683{1684	u16 head, tail;1685	struct tid_rdma_flow *flow;1686 1687	head = req->setup_head;1688	tail = req->clear_tail;1689	for ( ; CIRC_CNT(head, tail, MAX_FLOWS);1690	     tail = CIRC_NEXT(tail, MAX_FLOWS)) {1691		flow = &req->flows[tail];1692		if (cmp_psn(psn, flow->flow_state.ib_spsn) >= 0 &&1693		    cmp_psn(psn, flow->flow_state.ib_lpsn) <= 0) {1694			if (fidx)1695				*fidx = tail;1696			return flow;1697		}1698	}1699	return NULL;1700}1701 1702/* TID RDMA READ functions */1703u32 hfi1_build_tid_rdma_read_packet(struct rvt_swqe *wqe,1704				    struct ib_other_headers *ohdr, u32 *bth1,1705				    u32 *bth2, u32 *len)1706{1707	struct tid_rdma_request *req = wqe_to_tid_req(wqe);1708	struct tid_rdma_flow *flow = &req->flows[req->flow_idx];1709	struct rvt_qp *qp = req->qp;1710	struct hfi1_qp_priv *qpriv = qp->priv;1711	struct hfi1_swqe_priv *wpriv = wqe->priv;1712	struct tid_rdma_read_req *rreq = &ohdr->u.tid_rdma.r_req;1713	struct tid_rdma_params *remote;1714	u32 req_len = 0;1715	void *req_addr = NULL;1716 1717	/* This is the IB psn used to send the request */1718	*bth2 = mask_psn(flow->flow_state.ib_spsn + flow->pkt);1719	trace_hfi1_tid_flow_build_read_pkt(qp, req->flow_idx, flow);1720 1721	/* TID Entries for TID RDMA READ payload */1722	req_addr = &flow->tid_entry[flow->tid_idx];1723	req_len = sizeof(*flow->tid_entry) *1724			(flow->tidcnt - flow->tid_idx);1725 1726	memset(&ohdr->u.tid_rdma.r_req, 0, sizeof(ohdr->u.tid_rdma.r_req));1727	wpriv->ss.sge.vaddr = req_addr;1728	wpriv->ss.sge.sge_length = req_len;1729	wpriv->ss.sge.length = wpriv->ss.sge.sge_length;1730	/*1731	 * We can safely zero these out. Since the first SGE covers the1732	 * entire packet, nothing else should even look at the MR.1733	 */1734	wpriv->ss.sge.mr = NULL;1735	wpriv->ss.sge.m = 0;1736	wpriv->ss.sge.n = 0;1737 1738	wpriv->ss.sg_list = NULL;1739	wpriv->ss.total_len = wpriv->ss.sge.sge_length;1740	wpriv->ss.num_sge = 1;1741 1742	/* Construct the TID RDMA READ REQ packet header */1743	rcu_read_lock();1744	remote = rcu_dereference(qpriv->tid_rdma.remote);1745 1746	KDETH_RESET(rreq->kdeth0, KVER, 0x1);1747	KDETH_RESET(rreq->kdeth1, JKEY, remote->jkey);1748	rreq->reth.vaddr = cpu_to_be64(wqe->rdma_wr.remote_addr +1749			   req->cur_seg * req->seg_len + flow->sent);1750	rreq->reth.rkey = cpu_to_be32(wqe->rdma_wr.rkey);1751	rreq->reth.length = cpu_to_be32(*len);1752	rreq->tid_flow_psn =1753		cpu_to_be32((flow->flow_state.generation <<1754			     HFI1_KDETH_BTH_SEQ_SHIFT) |1755			    ((flow->flow_state.spsn + flow->pkt) &1756			     HFI1_KDETH_BTH_SEQ_MASK));1757	rreq->tid_flow_qp =1758		cpu_to_be32(qpriv->tid_rdma.local.qp |1759			    ((flow->idx & TID_RDMA_DESTQP_FLOW_MASK) <<1760			     TID_RDMA_DESTQP_FLOW_SHIFT) |1761			    qpriv->rcd->ctxt);1762	rreq->verbs_qp = cpu_to_be32(qp->remote_qpn);1763	*bth1 &= ~RVT_QPN_MASK;1764	*bth1 |= remote->qp;1765	*bth2 |= IB_BTH_REQ_ACK;1766	rcu_read_unlock();1767 1768	/* We are done with this segment */1769	flow->sent += *len;1770	req->cur_seg++;1771	qp->s_state = TID_OP(READ_REQ);1772	req->ack_pending++;1773	req->flow_idx = (req->flow_idx + 1) & (MAX_FLOWS - 1);1774	qpriv->pending_tid_r_segs++;1775	qp->s_num_rd_atomic++;1776 1777	/* Set the TID RDMA READ request payload size */1778	*len = req_len;1779 1780	return sizeof(ohdr->u.tid_rdma.r_req) / sizeof(u32);1781}1782 1783/*1784 * @len: contains the data length to read upon entry and the read request1785 *       payload length upon exit.1786 */1787u32 hfi1_build_tid_rdma_read_req(struct rvt_qp *qp, struct rvt_swqe *wqe,1788				 struct ib_other_headers *ohdr, u32 *bth1,1789				 u32 *bth2, u32 *len)1790	__must_hold(&qp->s_lock)1791{1792	struct hfi1_qp_priv *qpriv = qp->priv;1793	struct tid_rdma_request *req = wqe_to_tid_req(wqe);1794	struct tid_rdma_flow *flow = NULL;1795	u32 hdwords = 0;1796	bool last;1797	bool retry = true;1798	u32 npkts = rvt_div_round_up_mtu(qp, *len);1799 1800	trace_hfi1_tid_req_build_read_req(qp, 0, wqe->wr.opcode, wqe->psn,1801					  wqe->lpsn, req);1802	/*1803	 * Check sync conditions. Make sure that there are no pending1804	 * segments before freeing the flow.1805	 */1806sync_check:1807	if (req->state == TID_REQUEST_SYNC) {1808		if (qpriv->pending_tid_r_segs)1809			goto done;1810 1811		hfi1_kern_clear_hw_flow(req->rcd, qp);1812		qpriv->s_flags &= ~HFI1_R_TID_SW_PSN;1813		req->state = TID_REQUEST_ACTIVE;1814	}1815 1816	/*1817	 * If the request for this segment is resent, the tid resources should1818	 * have been allocated before. In this case, req->flow_idx should1819	 * fall behind req->setup_head.1820	 */1821	if (req->flow_idx == req->setup_head) {1822		retry = false;1823		if (req->state == TID_REQUEST_RESEND) {1824			/*1825			 * This is the first new segment for a request whose1826			 * earlier segments have been re-sent. We need to1827			 * set up the sge pointer correctly.1828			 */1829			restart_sge(&qp->s_sge, wqe, req->s_next_psn,1830				    qp->pmtu);1831			req->isge = 0;1832			req->state = TID_REQUEST_ACTIVE;1833		}1834 1835		/*1836		 * Check sync. The last PSN of each generation is reserved for1837		 * RESYNC.1838		 */1839		if ((qpriv->flow_state.psn + npkts) > MAX_TID_FLOW_PSN - 1) {1840			req->state = TID_REQUEST_SYNC;1841			goto sync_check;1842		}1843 1844		/* Allocate the flow if not yet */1845		if (hfi1_kern_setup_hw_flow(qpriv->rcd, qp))1846			goto done;1847 1848		/*1849		 * The following call will advance req->setup_head after1850		 * allocating the tid entries.1851		 */1852		if (hfi1_kern_exp_rcv_setup(req, &qp->s_sge, &last)) {1853			req->state = TID_REQUEST_QUEUED;1854 1855			/*1856			 * We don't have resources for this segment. The QP has1857			 * already been queued.1858			 */1859			goto done;1860		}1861	}1862 1863	/* req->flow_idx should only be one slot behind req->setup_head */1864	flow = &req->flows[req->flow_idx];1865	flow->pkt = 0;1866	flow->tid_idx = 0;1867	flow->sent = 0;1868	if (!retry) {1869		/* Set the first and last IB PSN for the flow in use.*/1870		flow->flow_state.ib_spsn = req->s_next_psn;1871		flow->flow_state.ib_lpsn =1872			flow->flow_state.ib_spsn + flow->npkts - 1;1873	}1874 1875	/* Calculate the next segment start psn.*/1876	req->s_next_psn += flow->npkts;1877 1878	/* Build the packet header */1879	hdwords = hfi1_build_tid_rdma_read_packet(wqe, ohdr, bth1, bth2, len);1880done:1881	return hdwords;1882}1883 1884/*1885 * Validate and accept the TID RDMA READ request parameters.1886 * Return 0 if the request is accepted successfully;1887 * Return 1 otherwise.1888 */1889static int tid_rdma_rcv_read_request(struct rvt_qp *qp,1890				     struct rvt_ack_entry *e,1891				     struct hfi1_packet *packet,1892				     struct ib_other_headers *ohdr,1893				     u32 bth0, u32 psn, u64 vaddr, u32 len)1894{1895	struct hfi1_qp_priv *qpriv = qp->priv;1896	struct tid_rdma_request *req;1897	struct tid_rdma_flow *flow;1898	u32 flow_psn, i, tidlen = 0, pktlen, tlen;1899 1900	req = ack_to_tid_req(e);1901 1902	/* Validate the payload first */1903	flow = &req->flows[req->setup_head];1904 1905	/* payload length = packet length - (header length + ICRC length) */1906	pktlen = packet->tlen - (packet->hlen + 4);1907	if (pktlen > sizeof(flow->tid_entry))1908		return 1;1909	memcpy(flow->tid_entry, packet->ebuf, pktlen);1910	flow->tidcnt = pktlen / sizeof(*flow->tid_entry);1911 1912	/*1913	 * Walk the TID_ENTRY list to make sure we have enough space for a1914	 * complete segment. Also calculate the number of required packets.1915	 */1916	flow->npkts = rvt_div_round_up_mtu(qp, len);1917	for (i = 0; i < flow->tidcnt; i++) {1918		trace_hfi1_tid_entry_rcv_read_req(qp, i,1919						  flow->tid_entry[i]);1920		tlen = EXP_TID_GET(flow->tid_entry[i], LEN);1921		if (!tlen)1922			return 1;1923 1924		/*1925		 * For tid pair (tidctr == 3), the buffer size of the pair1926		 * should be the sum of the buffer size described by each1927		 * tid entry. However, only the first entry needs to be1928		 * specified in the request (see WFR HAS Section 8.5.7.1).1929		 */1930		tidlen += tlen;1931	}1932	if (tidlen * PAGE_SIZE < len)1933		return 1;1934 1935	/* Empty the flow array */1936	req->clear_tail = req->setup_head;1937	flow->pkt = 0;1938	flow->tid_idx = 0;1939	flow->tid_offset = 0;1940	flow->sent = 0;1941	flow->tid_qpn = be32_to_cpu(ohdr->u.tid_rdma.r_req.tid_flow_qp);1942	flow->idx = (flow->tid_qpn >> TID_RDMA_DESTQP_FLOW_SHIFT) &1943		    TID_RDMA_DESTQP_FLOW_MASK;1944	flow_psn = mask_psn(be32_to_cpu(ohdr->u.tid_rdma.r_req.tid_flow_psn));1945	flow->flow_state.generation = flow_psn >> HFI1_KDETH_BTH_SEQ_SHIFT;1946	flow->flow_state.spsn = flow_psn & HFI1_KDETH_BTH_SEQ_MASK;1947	flow->length = len;1948 1949	flow->flow_state.lpsn = flow->flow_state.spsn +1950		flow->npkts - 1;1951	flow->flow_state.ib_spsn = psn;1952	flow->flow_state.ib_lpsn = flow->flow_state.ib_spsn + flow->npkts - 1;1953 1954	trace_hfi1_tid_flow_rcv_read_req(qp, req->setup_head, flow);1955	/* Set the initial flow index to the current flow. */1956	req->flow_idx = req->setup_head;1957 1958	/* advance circular buffer head */1959	req->setup_head = (req->setup_head + 1) & (MAX_FLOWS - 1);1960 1961	/*1962	 * Compute last PSN for request.1963	 */1964	e->opcode = (bth0 >> 24) & 0xff;1965	e->psn = psn;1966	e->lpsn = psn + flow->npkts - 1;1967	e->sent = 0;1968 1969	req->n_flows = qpriv->tid_rdma.local.max_read;1970	req->state = TID_REQUEST_ACTIVE;1971	req->cur_seg = 0;1972	req->comp_seg = 0;1973	req->ack_seg = 0;1974	req->isge = 0;1975	req->seg_len = qpriv->tid_rdma.local.max_len;1976	req->total_len = len;1977	req->total_segs = 1;1978	req->r_flow_psn = e->psn;1979 1980	trace_hfi1_tid_req_rcv_read_req(qp, 0, e->opcode, e->psn, e->lpsn,1981					req);1982	return 0;1983}1984 1985static int tid_rdma_rcv_error(struct hfi1_packet *packet,1986			      struct ib_other_headers *ohdr,1987			      struct rvt_qp *qp, u32 psn, int diff)1988{1989	struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);1990	struct hfi1_ctxtdata *rcd = ((struct hfi1_qp_priv *)qp->priv)->rcd;1991	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);1992	struct hfi1_qp_priv *qpriv = qp->priv;1993	struct rvt_ack_entry *e;1994	struct tid_rdma_request *req;1995	unsigned long flags;1996	u8 prev;1997	bool old_req;1998 1999	trace_hfi1_rsp_tid_rcv_error(qp, psn);2000	trace_hfi1_tid_rdma_rcv_err(qp, 0, psn, diff);2001	if (diff > 0) {2002		/* sequence error */2003		if (!qp->r_nak_state) {2004			ibp->rvp.n_rc_seqnak++;2005			qp->r_nak_state = IB_NAK_PSN_ERROR;2006			qp->r_ack_psn = qp->r_psn;2007			rc_defered_ack(rcd, qp);2008		}2009		goto done;2010	}2011 2012	ibp->rvp.n_rc_dupreq++;2013 2014	spin_lock_irqsave(&qp->s_lock, flags);2015	e = find_prev_entry(qp, psn, &prev, NULL, &old_req);2016	if (!e || (e->opcode != TID_OP(READ_REQ) &&2017		   e->opcode != TID_OP(WRITE_REQ)))2018		goto unlock;2019 2020	req = ack_to_tid_req(e);2021	req->r_flow_psn = psn;2022	trace_hfi1_tid_req_rcv_err(qp, 0, e->opcode, e->psn, e->lpsn, req);2023	if (e->opcode == TID_OP(READ_REQ)) {2024		struct ib_reth *reth;2025		u32 len;2026		u32 rkey;2027		u64 vaddr;2028		int ok;2029		u32 bth0;2030 2031		reth = &ohdr->u.tid_rdma.r_req.reth;2032		/*2033		 * The requester always restarts from the start of the original2034		 * request.2035		 */2036		len = be32_to_cpu(reth->length);2037		if (psn != e->psn || len != req->total_len)2038			goto unlock;2039 2040		release_rdma_sge_mr(e);2041 2042		rkey = be32_to_cpu(reth->rkey);2043		vaddr = get_ib_reth_vaddr(reth);2044 2045		qp->r_len = len;2046		ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey,2047				 IB_ACCESS_REMOTE_READ);2048		if (unlikely(!ok))2049			goto unlock;2050 2051		/*2052		 * If all the response packets for the current request have2053		 * been sent out and this request is complete (old_request2054		 * == false) and the TID flow may be unusable (the2055		 * req->clear_tail is advanced). However, when an earlier2056		 * request is received, this request will not be complete any2057		 * more (qp->s_tail_ack_queue is moved back, see below).2058		 * Consequently, we need to update the TID flow info every time2059		 * a duplicate request is received.2060		 */2061		bth0 = be32_to_cpu(ohdr->bth[0]);2062		if (tid_rdma_rcv_read_request(qp, e, packet, ohdr, bth0, psn,2063					      vaddr, len))2064			goto unlock;2065 2066		/*2067		 * True if the request is already scheduled (between2068		 * qp->s_tail_ack_queue and qp->r_head_ack_queue);2069		 */2070		if (old_req)2071			goto unlock;2072	} else {2073		struct flow_state *fstate;2074		bool schedule = false;2075		u8 i;2076 2077		if (req->state == TID_REQUEST_RESEND) {2078			req->state = TID_REQUEST_RESEND_ACTIVE;2079		} else if (req->state == TID_REQUEST_INIT_RESEND) {2080			req->state = TID_REQUEST_INIT;2081			schedule = true;2082		}2083 2084		/*2085		 * True if the request is already scheduled (between2086		 * qp->s_tail_ack_queue and qp->r_head_ack_queue).2087		 * Also, don't change requests, which are at the SYNC2088		 * point and haven't generated any responses yet.2089		 * There is nothing to retransmit for them yet.2090		 */2091		if (old_req || req->state == TID_REQUEST_INIT ||2092		    (req->state == TID_REQUEST_SYNC && !req->cur_seg)) {2093			for (i = prev + 1; ; i++) {2094				if (i > rvt_size_atomic(&dev->rdi))2095					i = 0;2096				if (i == qp->r_head_ack_queue)2097					break;2098				e = &qp->s_ack_queue[i];2099				req = ack_to_tid_req(e);2100				if (e->opcode == TID_OP(WRITE_REQ) &&2101				    req->state == TID_REQUEST_INIT)2102					req->state = TID_REQUEST_INIT_RESEND;2103			}2104			/*2105			 * If the state of the request has been changed,2106			 * the first leg needs to get scheduled in order to2107			 * pick up the change. Otherwise, normal response2108			 * processing should take care of it.2109			 */2110			if (!schedule)2111				goto unlock;2112		}2113 2114		/*2115		 * If there is no more allocated segment, just schedule the qp2116		 * without changing any state.2117		 */2118		if (req->clear_tail == req->setup_head)2119			goto schedule;2120		/*2121		 * If this request has sent responses for segments, which have2122		 * not received data yet (flow_idx != clear_tail), the flow_idx2123		 * pointer needs to be adjusted so the same responses can be2124		 * re-sent.2125		 */2126		if (CIRC_CNT(req->flow_idx, req->clear_tail, MAX_FLOWS)) {2127			fstate = &req->flows[req->clear_tail].flow_state;2128			qpriv->pending_tid_w_segs -=2129				CIRC_CNT(req->flow_idx, req->clear_tail,2130					 MAX_FLOWS);2131			req->flow_idx =2132				CIRC_ADD(req->clear_tail,2133					 delta_psn(psn, fstate->resp_ib_psn),2134					 MAX_FLOWS);2135			qpriv->pending_tid_w_segs +=2136				delta_psn(psn, fstate->resp_ib_psn);2137			/*2138			 * When flow_idx == setup_head, we've gotten a duplicate2139			 * request for a segment, which has not been allocated2140			 * yet. In that case, don't adjust this request.2141			 * However, we still want to go through the loop below2142			 * to adjust all subsequent requests.2143			 */2144			if (CIRC_CNT(req->setup_head, req->flow_idx,2145				     MAX_FLOWS)) {2146				req->cur_seg = delta_psn(psn, e->psn);2147				req->state = TID_REQUEST_RESEND_ACTIVE;2148			}2149		}2150 2151		for (i = prev + 1; ; i++) {2152			/*2153			 * Look at everything up to and including2154			 * s_tail_ack_queue2155			 */2156			if (i > rvt_size_atomic(&dev->rdi))2157				i = 0;2158			if (i == qp->r_head_ack_queue)2159				break;2160			e = &qp->s_ack_queue[i];2161			req = ack_to_tid_req(e);2162			trace_hfi1_tid_req_rcv_err(qp, 0, e->opcode, e->psn,2163						   e->lpsn, req);2164			if (e->opcode != TID_OP(WRITE_REQ) ||2165			    req->cur_seg == req->comp_seg ||2166			    req->state == TID_REQUEST_INIT ||2167			    req->state == TID_REQUEST_INIT_RESEND) {2168				if (req->state == TID_REQUEST_INIT)2169					req->state = TID_REQUEST_INIT_RESEND;2170				continue;2171			}2172			qpriv->pending_tid_w_segs -=2173				CIRC_CNT(req->flow_idx,2174					 req->clear_tail,2175					 MAX_FLOWS);2176			req->flow_idx = req->clear_tail;2177			req->state = TID_REQUEST_RESEND;2178			req->cur_seg = req->comp_seg;2179		}2180		qpriv->s_flags &= ~HFI1_R_TID_WAIT_INTERLCK;2181	}2182	/* Re-process old requests.*/2183	if (qp->s_acked_ack_queue == qp->s_tail_ack_queue)2184		qp->s_acked_ack_queue = prev;2185	qp->s_tail_ack_queue = prev;2186	/*2187	 * Since the qp->s_tail_ack_queue is modified, the2188	 * qp->s_ack_state must be changed to re-initialize2189	 * qp->s_ack_rdma_sge; Otherwise, we will end up in2190	 * wrong memory region.2191	 */2192	qp->s_ack_state = OP(ACKNOWLEDGE);2193schedule:2194	/*2195	 * It's possible to receive a retry psn that is earlier than an RNRNAK2196	 * psn. In this case, the rnrnak state should be cleared.2197	 */2198	if (qpriv->rnr_nak_state) {2199		qp->s_nak_state = 0;2200		qpriv->rnr_nak_state = TID_RNR_NAK_INIT;2201		qp->r_psn = e->lpsn + 1;2202		hfi1_tid_write_alloc_resources(qp, true);2203	}2204 2205	qp->r_state = e->opcode;2206	qp->r_nak_state = 0;2207	qp->s_flags |= RVT_S_RESP_PENDING;2208	hfi1_schedule_send(qp);2209unlock:2210	spin_unlock_irqrestore(&qp->s_lock, flags);2211done:2212	return 1;2213}2214 2215void hfi1_rc_rcv_tid_rdma_read_req(struct hfi1_packet *packet)2216{2217	/* HANDLER FOR TID RDMA READ REQUEST packet (Responder side)*/2218 2219	/*2220	 * 1. Verify TID RDMA READ REQ as per IB_OPCODE_RC_RDMA_READ2221	 *    (see hfi1_rc_rcv())2222	 * 2. Put TID RDMA READ REQ into the response queue (s_ack_queue)2223	 *     - Setup struct tid_rdma_req with request info2224	 *     - Initialize struct tid_rdma_flow info;2225	 *     - Copy TID entries;2226	 * 3. Set the qp->s_ack_state.2227	 * 4. Set RVT_S_RESP_PENDING in s_flags.2228	 * 5. Kick the send engine (hfi1_schedule_send())2229	 */2230	struct hfi1_ctxtdata *rcd = packet->rcd;2231	struct rvt_qp *qp = packet->qp;2232	struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);2233	struct ib_other_headers *ohdr = packet->ohdr;2234	struct rvt_ack_entry *e;2235	unsigned long flags;2236	struct ib_reth *reth;2237	struct hfi1_qp_priv *qpriv = qp->priv;2238	u32 bth0, psn, len, rkey;2239	bool fecn;2240	u8 next;2241	u64 vaddr;2242	int diff;2243	u8 nack_state = IB_NAK_INVALID_REQUEST;2244 2245	bth0 = be32_to_cpu(ohdr->bth[0]);2246	if (hfi1_ruc_check_hdr(ibp, packet))2247		return;2248 2249	fecn = process_ecn(qp, packet);2250	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));2251	trace_hfi1_rsp_rcv_tid_read_req(qp, psn);2252 2253	if (qp->state == IB_QPS_RTR && !(qp->r_flags & RVT_R_COMM_EST))2254		rvt_comm_est(qp);2255 2256	if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_READ)))2257		goto nack_inv;2258 2259	reth = &ohdr->u.tid_rdma.r_req.reth;2260	vaddr = be64_to_cpu(reth->vaddr);2261	len = be32_to_cpu(reth->length);2262	/* The length needs to be in multiples of PAGE_SIZE */2263	if (!len || len & ~PAGE_MASK || len > qpriv->tid_rdma.local.max_len)2264		goto nack_inv;2265 2266	diff = delta_psn(psn, qp->r_psn);2267	if (unlikely(diff)) {2268		tid_rdma_rcv_err(packet, ohdr, qp, psn, diff, fecn);2269		return;2270	}2271 2272	/* We've verified the request, insert it into the ack queue. */2273	next = qp->r_head_ack_queue + 1;2274	if (next > rvt_size_atomic(ib_to_rvt(qp->ibqp.device)))2275		next = 0;2276	spin_lock_irqsave(&qp->s_lock, flags);2277	if (unlikely(next == qp->s_tail_ack_queue)) {2278		if (!qp->s_ack_queue[next].sent) {2279			nack_state = IB_NAK_REMOTE_OPERATIONAL_ERROR;2280			goto nack_inv_unlock;2281		}2282		update_ack_queue(qp, next);2283	}2284	e = &qp->s_ack_queue[qp->r_head_ack_queue];2285	release_rdma_sge_mr(e);2286 2287	rkey = be32_to_cpu(reth->rkey);2288	qp->r_len = len;2289 2290	if (unlikely(!rvt_rkey_ok(qp, &e->rdma_sge, qp->r_len, vaddr,2291				  rkey, IB_ACCESS_REMOTE_READ)))2292		goto nack_acc;2293 2294	/* Accept the request parameters */2295	if (tid_rdma_rcv_read_request(qp, e, packet, ohdr, bth0, psn, vaddr,2296				      len))2297		goto nack_inv_unlock;2298 2299	qp->r_state = e->opcode;2300	qp->r_nak_state = 0;2301	/*2302	 * We need to increment the MSN here instead of when we2303	 * finish sending the result since a duplicate request would2304	 * increment it more than once.2305	 */2306	qp->r_msn++;2307	qp->r_psn += e->lpsn - e->psn + 1;2308 2309	qp->r_head_ack_queue = next;2310 2311	/*2312	 * For all requests other than TID WRITE which are added to the ack2313	 * queue, qpriv->r_tid_alloc follows qp->r_head_ack_queue. It is ok to2314	 * do this because of interlocks between these and TID WRITE2315	 * requests. The same change has also been made in hfi1_rc_rcv().2316	 */2317	qpriv->r_tid_alloc = qp->r_head_ack_queue;2318 2319	/* Schedule the send tasklet. */2320	qp->s_flags |= RVT_S_RESP_PENDING;2321	if (fecn)2322		qp->s_flags |= RVT_S_ECN;2323	hfi1_schedule_send(qp);2324 2325	spin_unlock_irqrestore(&qp->s_lock, flags);2326	return;2327 2328nack_inv_unlock:2329	spin_unlock_irqrestore(&qp->s_lock, flags);2330nack_inv:2331	rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);2332	qp->r_nak_state = nack_state;2333	qp->r_ack_psn = qp->r_psn;2334	/* Queue NAK for later */2335	rc_defered_ack(rcd, qp);2336	return;2337nack_acc:2338	spin_unlock_irqrestore(&qp->s_lock, flags);2339	rvt_rc_error(qp, IB_WC_LOC_PROT_ERR);2340	qp->r_nak_state = IB_NAK_REMOTE_ACCESS_ERROR;2341	qp->r_ack_psn = qp->r_psn;2342}2343 2344u32 hfi1_build_tid_rdma_read_resp(struct rvt_qp *qp, struct rvt_ack_entry *e,2345				  struct ib_other_headers *ohdr, u32 *bth0,2346				  u32 *bth1, u32 *bth2, u32 *len, bool *last)2347{2348	struct hfi1_ack_priv *epriv = e->priv;2349	struct tid_rdma_request *req = &epriv->tid_req;2350	struct hfi1_qp_priv *qpriv = qp->priv;2351	struct tid_rdma_flow *flow = &req->flows[req->clear_tail];2352	u32 tidentry = flow->tid_entry[flow->tid_idx];2353	u32 tidlen = EXP_TID_GET(tidentry, LEN) << PAGE_SHIFT;2354	struct tid_rdma_read_resp *resp = &ohdr->u.tid_rdma.r_rsp;2355	u32 next_offset, om = KDETH_OM_LARGE;2356	bool last_pkt;2357	u32 hdwords = 0;2358	struct tid_rdma_params *remote;2359 2360	*len = min_t(u32, qp->pmtu, tidlen - flow->tid_offset);2361	flow->sent += *len;2362	next_offset = flow->tid_offset + *len;2363	last_pkt = (flow->sent >= flow->length);2364 2365	trace_hfi1_tid_entry_build_read_resp(qp, flow->tid_idx, tidentry);2366	trace_hfi1_tid_flow_build_read_resp(qp, req->clear_tail, flow);2367 2368	rcu_read_lock();2369	remote = rcu_dereference(qpriv->tid_rdma.remote);2370	if (!remote) {2371		rcu_read_unlock();2372		goto done;2373	}2374	KDETH_RESET(resp->kdeth0, KVER, 0x1);2375	KDETH_SET(resp->kdeth0, SH, !last_pkt);2376	KDETH_SET(resp->kdeth0, INTR, !!(!last_pkt && remote->urg));2377	KDETH_SET(resp->kdeth0, TIDCTRL, EXP_TID_GET(tidentry, CTRL));2378	KDETH_SET(resp->kdeth0, TID, EXP_TID_GET(tidentry, IDX));2379	KDETH_SET(resp->kdeth0, OM, om == KDETH_OM_LARGE);2380	KDETH_SET(resp->kdeth0, OFFSET, flow->tid_offset / om);2381	KDETH_RESET(resp->kdeth1, JKEY, remote->jkey);2382	resp->verbs_qp = cpu_to_be32(qp->remote_qpn);2383	rcu_read_unlock();2384 2385	resp->aeth = rvt_compute_aeth(qp);2386	resp->verbs_psn = cpu_to_be32(mask_psn(flow->flow_state.ib_spsn +2387					       flow->pkt));2388 2389	*bth0 = TID_OP(READ_RESP) << 24;2390	*bth1 = flow->tid_qpn;2391	*bth2 = mask_psn(((flow->flow_state.spsn + flow->pkt++) &2392			  HFI1_KDETH_BTH_SEQ_MASK) |2393			 (flow->flow_state.generation <<2394			  HFI1_KDETH_BTH_SEQ_SHIFT));2395	*last = last_pkt;2396	if (last_pkt)2397		/* Advance to next flow */2398		req->clear_tail = (req->clear_tail + 1) &2399				  (MAX_FLOWS - 1);2400 2401	if (next_offset >= tidlen) {2402		flow->tid_offset = 0;2403		flow->tid_idx++;2404	} else {2405		flow->tid_offset = next_offset;2406	}2407 2408	hdwords = sizeof(ohdr->u.tid_rdma.r_rsp) / sizeof(u32);2409 2410done:2411	return hdwords;2412}2413 2414static inline struct tid_rdma_request *2415find_tid_request(struct rvt_qp *qp, u32 psn, enum ib_wr_opcode opcode)2416	__must_hold(&qp->s_lock)2417{2418	struct rvt_swqe *wqe;2419	struct tid_rdma_request *req = NULL;2420	u32 i, end;2421 2422	end = qp->s_cur + 1;2423	if (end == qp->s_size)2424		end = 0;2425	for (i = qp->s_acked; i != end;) {2426		wqe = rvt_get_swqe_ptr(qp, i);2427		if (cmp_psn(psn, wqe->psn) >= 0 &&2428		    cmp_psn(psn, wqe->lpsn) <= 0) {2429			if (wqe->wr.opcode == opcode)2430				req = wqe_to_tid_req(wqe);2431			break;2432		}2433		if (++i == qp->s_size)2434			i = 0;2435	}2436 2437	return req;2438}2439 2440void hfi1_rc_rcv_tid_rdma_read_resp(struct hfi1_packet *packet)2441{2442	/* HANDLER FOR TID RDMA READ RESPONSE packet (Requester side) */2443 2444	/*2445	 * 1. Find matching SWQE2446	 * 2. Check that the entire segment has been read.2447	 * 3. Remove HFI1_S_WAIT_TID_RESP from s_flags.2448	 * 4. Free the TID flow resources.2449	 * 5. Kick the send engine (hfi1_schedule_send())2450	 */2451	struct ib_other_headers *ohdr = packet->ohdr;2452	struct rvt_qp *qp = packet->qp;2453	struct hfi1_qp_priv *priv = qp->priv;2454	struct hfi1_ctxtdata *rcd = packet->rcd;2455	struct tid_rdma_request *req;2456	struct tid_rdma_flow *flow;2457	u32 opcode, aeth;2458	bool fecn;2459	unsigned long flags;2460	u32 kpsn, ipsn;2461 2462	trace_hfi1_sender_rcv_tid_read_resp(qp);2463	fecn = process_ecn(qp, packet);2464	kpsn = mask_psn(be32_to_cpu(ohdr->bth[2]));2465	aeth = be32_to_cpu(ohdr->u.tid_rdma.r_rsp.aeth);2466	opcode = (be32_to_cpu(ohdr->bth[0]) >> 24) & 0xff;2467 2468	spin_lock_irqsave(&qp->s_lock, flags);2469	ipsn = mask_psn(be32_to_cpu(ohdr->u.tid_rdma.r_rsp.verbs_psn));2470	req = find_tid_request(qp, ipsn, IB_WR_TID_RDMA_READ);2471	if (unlikely(!req))2472		goto ack_op_err;2473 2474	flow = &req->flows[req->clear_tail];2475	/* When header suppression is disabled */2476	if (cmp_psn(ipsn, flow->flow_state.ib_lpsn)) {2477		update_r_next_psn_fecn(packet, priv, rcd, flow, fecn);2478 2479		if (cmp_psn(kpsn, flow->flow_state.r_next_psn))2480			goto ack_done;2481		flow->flow_state.r_next_psn = mask_psn(kpsn + 1);2482		/*2483		 * Copy the payload to destination buffer if this packet is2484		 * delivered as an eager packet due to RSM rule and FECN.2485		 * The RSM rule selects FECN bit in BTH and SH bit in2486		 * KDETH header and therefore will not match the last2487		 * packet of each segment that has SH bit cleared.2488		 */2489		if (fecn && packet->etype == RHF_RCV_TYPE_EAGER) {2490			struct rvt_sge_state ss;2491			u32 len;2492			u32 tlen = packet->tlen;2493			u16 hdrsize = packet->hlen;2494			u8 pad = packet->pad;2495			u8 extra_bytes = pad + packet->extra_byte +2496				(SIZE_OF_CRC << 2);2497			u32 pmtu = qp->pmtu;2498 2499			if (unlikely(tlen != (hdrsize + pmtu + extra_bytes)))2500				goto ack_op_err;2501			len = restart_sge(&ss, req->e.swqe, ipsn, pmtu);2502			if (unlikely(len < pmtu))2503				goto ack_op_err;2504			rvt_copy_sge(qp, &ss, packet->payload, pmtu, false,2505				     false);2506			/* Raise the sw sequence check flag for next packet */2507			priv->s_flags |= HFI1_R_TID_SW_PSN;2508		}2509 2510		goto ack_done;2511	}2512	flow->flow_state.r_next_psn = mask_psn(kpsn + 1);2513	req->ack_pending--;2514	priv->pending_tid_r_segs--;2515	qp->s_num_rd_atomic--;2516	if ((qp->s_flags & RVT_S_WAIT_FENCE) &&2517	    !qp->s_num_rd_atomic) {2518		qp->s_flags &= ~(RVT_S_WAIT_FENCE |2519				 RVT_S_WAIT_ACK);2520		hfi1_schedule_send(qp);2521	}2522	if (qp->s_flags & RVT_S_WAIT_RDMAR) {2523		qp->s_flags &= ~(RVT_S_WAIT_RDMAR | RVT_S_WAIT_ACK);2524		hfi1_schedule_send(qp);2525	}2526 2527	trace_hfi1_ack(qp, ipsn);2528	trace_hfi1_tid_req_rcv_read_resp(qp, 0, req->e.swqe->wr.opcode,2529					 req->e.swqe->psn, req->e.swqe->lpsn,2530					 req);2531	trace_hfi1_tid_flow_rcv_read_resp(qp, req->clear_tail, flow);2532 2533	/* Release the tid resources */2534	hfi1_kern_exp_rcv_clear(req);2535 2536	if (!do_rc_ack(qp, aeth, ipsn, opcode, 0, rcd))2537		goto ack_done;2538 2539	/* If not done yet, build next read request */2540	if (++req->comp_seg >= req->total_segs) {2541		priv->tid_r_comp++;2542		req->state = TID_REQUEST_COMPLETE;2543	}2544 2545	/*2546	 * Clear the hw flow under two conditions:2547	 * 1. This request is a sync point and it is complete;2548	 * 2. Current request is completed and there are no more requests.2549	 */2550	if ((req->state == TID_REQUEST_SYNC &&2551	     req->comp_seg == req->cur_seg) ||2552	    priv->tid_r_comp == priv->tid_r_reqs) {2553		hfi1_kern_clear_hw_flow(priv->rcd, qp);2554		priv->s_flags &= ~HFI1_R_TID_SW_PSN;2555		if (req->state == TID_REQUEST_SYNC)2556			req->state = TID_REQUEST_ACTIVE;2557	}2558 2559	hfi1_schedule_send(qp);2560	goto ack_done;2561 2562ack_op_err:2563	/*2564	 * The test indicates that the send engine has finished its cleanup2565	 * after sending the request and it's now safe to put the QP into error2566	 * state. However, if the wqe queue is empty (qp->s_acked == qp->s_tail2567	 * == qp->s_head), it would be unsafe to complete the wqe pointed by2568	 * qp->s_acked here. Putting the qp into error state will safely flush2569	 * all remaining requests.2570	 */2571	if (qp->s_last == qp->s_acked)2572		rvt_error_qp(qp, IB_WC_WR_FLUSH_ERR);2573 2574ack_done:2575	spin_unlock_irqrestore(&qp->s_lock, flags);2576}2577 2578void hfi1_kern_read_tid_flow_free(struct rvt_qp *qp)2579	__must_hold(&qp->s_lock)2580{2581	u32 n = qp->s_acked;2582	struct rvt_swqe *wqe;2583	struct tid_rdma_request *req;2584	struct hfi1_qp_priv *priv = qp->priv;2585 2586	lockdep_assert_held(&qp->s_lock);2587	/* Free any TID entries */2588	while (n != qp->s_tail) {2589		wqe = rvt_get_swqe_ptr(qp, n);2590		if (wqe->wr.opcode == IB_WR_TID_RDMA_READ) {2591			req = wqe_to_tid_req(wqe);2592			hfi1_kern_exp_rcv_clear_all(req);2593		}2594 2595		if (++n == qp->s_size)2596			n = 0;2597	}2598	/* Free flow */2599	hfi1_kern_clear_hw_flow(priv->rcd, qp);2600}2601 2602static bool tid_rdma_tid_err(struct hfi1_packet *packet, u8 rcv_type)2603{2604	struct rvt_qp *qp = packet->qp;2605 2606	if (rcv_type >= RHF_RCV_TYPE_IB)2607		goto done;2608 2609	spin_lock(&qp->s_lock);2610 2611	/*2612	 * We've ran out of space in the eager buffer.2613	 * Eagerly received KDETH packets which require space in the2614	 * Eager buffer (packet that have payload) are TID RDMA WRITE2615	 * response packets. In this case, we have to re-transmit the2616	 * TID RDMA WRITE request.2617	 */2618	if (rcv_type == RHF_RCV_TYPE_EAGER) {2619		hfi1_restart_rc(qp, qp->s_last_psn + 1, 1);2620		hfi1_schedule_send(qp);2621	}2622 2623	/* Since no payload is delivered, just drop the packet */2624	spin_unlock(&qp->s_lock);2625done:2626	return true;2627}2628 2629static void restart_tid_rdma_read_req(struct hfi1_ctxtdata *rcd,2630				      struct rvt_qp *qp, struct rvt_swqe *wqe)2631{2632	struct tid_rdma_request *req;2633	struct tid_rdma_flow *flow;2634 2635	/* Start from the right segment */2636	qp->r_flags |= RVT_R_RDMAR_SEQ;2637	req = wqe_to_tid_req(wqe);2638	flow = &req->flows[req->clear_tail];2639	hfi1_restart_rc(qp, flow->flow_state.ib_spsn, 0);2640	if (list_empty(&qp->rspwait)) {2641		qp->r_flags |= RVT_R_RSP_SEND;2642		rvt_get_qp(qp);2643		list_add_tail(&qp->rspwait, &rcd->qp_wait_list);2644	}2645}2646 2647/*2648 * Handle the KDETH eflags for TID RDMA READ response.2649 *2650 * Return true if the last packet for a segment has been received and it is2651 * time to process the response normally; otherwise, return true.2652 *2653 * The caller must hold the packet->qp->r_lock and the rcu_read_lock.2654 */2655static bool handle_read_kdeth_eflags(struct hfi1_ctxtdata *rcd,2656				     struct hfi1_packet *packet, u8 rcv_type,2657				     u8 rte, u32 psn, u32 ibpsn)2658	__must_hold(&packet->qp->r_lock) __must_hold(RCU)2659{2660	struct hfi1_pportdata *ppd = rcd->ppd;2661	struct hfi1_devdata *dd = ppd->dd;2662	struct hfi1_ibport *ibp;2663	struct rvt_swqe *wqe;2664	struct tid_rdma_request *req;2665	struct tid_rdma_flow *flow;2666	u32 ack_psn;2667	struct rvt_qp *qp = packet->qp;2668	struct hfi1_qp_priv *priv = qp->priv;2669	bool ret = true;2670	int diff = 0;2671	u32 fpsn;2672 2673	lockdep_assert_held(&qp->r_lock);2674	trace_hfi1_rsp_read_kdeth_eflags(qp, ibpsn);2675	trace_hfi1_sender_read_kdeth_eflags(qp);2676	trace_hfi1_tid_read_sender_kdeth_eflags(qp, 0);2677	spin_lock(&qp->s_lock);2678	/* If the psn is out of valid range, drop the packet */2679	if (cmp_psn(ibpsn, qp->s_last_psn) < 0 ||2680	    cmp_psn(ibpsn, qp->s_psn) > 0)2681		goto s_unlock;2682 2683	/*2684	 * Note that NAKs implicitly ACK outstanding SEND and RDMA write2685	 * requests and implicitly NAK RDMA read and atomic requests issued2686	 * before the NAK'ed request.2687	 */2688	ack_psn = ibpsn - 1;2689	wqe = rvt_get_swqe_ptr(qp, qp->s_acked);2690	ibp = to_iport(qp->ibqp.device, qp->port_num);2691 2692	/* Complete WQEs that the PSN finishes. */2693	while ((int)delta_psn(ack_psn, wqe->lpsn) >= 0) {2694		/*2695		 * If this request is a RDMA read or atomic, and the NACK is2696		 * for a later operation, this NACK NAKs the RDMA read or2697		 * atomic.2698		 */2699		if (wqe->wr.opcode == IB_WR_RDMA_READ ||2700		    wqe->wr.opcode == IB_WR_TID_RDMA_READ ||2701		    wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||2702		    wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD) {2703			/* Retry this request. */2704			if (!(qp->r_flags & RVT_R_RDMAR_SEQ)) {2705				qp->r_flags |= RVT_R_RDMAR_SEQ;2706				if (wqe->wr.opcode == IB_WR_TID_RDMA_READ) {2707					restart_tid_rdma_read_req(rcd, qp,2708								  wqe);2709				} else {2710					hfi1_restart_rc(qp, qp->s_last_psn + 1,2711							0);2712					if (list_empty(&qp->rspwait)) {2713						qp->r_flags |= RVT_R_RSP_SEND;2714						rvt_get_qp(qp);2715						list_add_tail(/* wait */2716						   &qp->rspwait,2717						   &rcd->qp_wait_list);2718					}2719				}2720			}2721			/*2722			 * No need to process the NAK since we are2723			 * restarting an earlier request.2724			 */2725			break;2726		}2727 2728		wqe = do_rc_completion(qp, wqe, ibp);2729		if (qp->s_acked == qp->s_tail)2730			goto s_unlock;2731	}2732 2733	if (qp->s_acked == qp->s_tail)2734		goto s_unlock;2735 2736	/* Handle the eflags for the request */2737	if (wqe->wr.opcode != IB_WR_TID_RDMA_READ)2738		goto s_unlock;2739 2740	req = wqe_to_tid_req(wqe);2741	trace_hfi1_tid_req_read_kdeth_eflags(qp, 0, wqe->wr.opcode, wqe->psn,2742					     wqe->lpsn, req);2743	switch (rcv_type) {2744	case RHF_RCV_TYPE_EXPECTED:2745		switch (rte) {2746		case RHF_RTE_EXPECTED_FLOW_SEQ_ERR:2747			/*2748			 * On the first occurrence of a Flow Sequence error,2749			 * the flag TID_FLOW_SW_PSN is set.2750			 *2751			 * After that, the flow is *not* reprogrammed and the2752			 * protocol falls back to SW PSN checking. This is done2753			 * to prevent continuous Flow Sequence errors for any2754			 * packets that could be still in the fabric.2755			 */2756			flow = &req->flows[req->clear_tail];2757			trace_hfi1_tid_flow_read_kdeth_eflags(qp,2758							      req->clear_tail,2759							      flow);2760			if (priv->s_flags & HFI1_R_TID_SW_PSN) {2761				diff = cmp_psn(psn,2762					       flow->flow_state.r_next_psn);2763				if (diff > 0) {2764					/* Drop the packet.*/2765					goto s_unlock;2766				} else if (diff < 0) {2767					/*2768					 * If a response packet for a restarted2769					 * request has come back, reset the2770					 * restart flag.2771					 */2772					if (qp->r_flags & RVT_R_RDMAR_SEQ)2773						qp->r_flags &=2774							~RVT_R_RDMAR_SEQ;2775 2776					/* Drop the packet.*/2777					goto s_unlock;2778				}2779 2780				/*2781				 * If SW PSN verification is successful and2782				 * this is the last packet in the segment, tell2783				 * the caller to process it as a normal packet.2784				 */2785				fpsn = full_flow_psn(flow,2786						     flow->flow_state.lpsn);2787				if (cmp_psn(fpsn, psn) == 0) {2788					ret = false;2789					if (qp->r_flags & RVT_R_RDMAR_SEQ)2790						qp->r_flags &=2791							~RVT_R_RDMAR_SEQ;2792				}2793				flow->flow_state.r_next_psn =2794					mask_psn(psn + 1);2795			} else {2796				u32 last_psn;2797 2798				last_psn = read_r_next_psn(dd, rcd->ctxt,2799							   flow->idx);2800				flow->flow_state.r_next_psn = last_psn;2801				priv->s_flags |= HFI1_R_TID_SW_PSN;2802				/*2803				 * If no request has been restarted yet,2804				 * restart the current one.2805				 */2806				if (!(qp->r_flags & RVT_R_RDMAR_SEQ))2807					restart_tid_rdma_read_req(rcd, qp,2808								  wqe);2809			}2810 2811			break;2812 2813		case RHF_RTE_EXPECTED_FLOW_GEN_ERR:2814			/*2815			 * Since the TID flow is able to ride through2816			 * generation mismatch, drop this stale packet.2817			 */2818			break;2819 2820		default:2821			break;2822		}2823		break;2824 2825	case RHF_RCV_TYPE_ERROR:2826		switch (rte) {2827		case RHF_RTE_ERROR_OP_CODE_ERR:2828		case RHF_RTE_ERROR_KHDR_MIN_LEN_ERR:2829		case RHF_RTE_ERROR_KHDR_HCRC_ERR:2830		case RHF_RTE_ERROR_KHDR_KVER_ERR:2831		case RHF_RTE_ERROR_CONTEXT_ERR:2832		case RHF_RTE_ERROR_KHDR_TID_ERR:2833		default:2834			break;2835		}2836		break;2837	default:2838		break;2839	}2840s_unlock:2841	spin_unlock(&qp->s_lock);2842	return ret;2843}2844 2845bool hfi1_handle_kdeth_eflags(struct hfi1_ctxtdata *rcd,2846			      struct hfi1_pportdata *ppd,2847			      struct hfi1_packet *packet)2848{2849	struct hfi1_ibport *ibp = &ppd->ibport_data;2850	struct hfi1_devdata *dd = ppd->dd;2851	struct rvt_dev_info *rdi = &dd->verbs_dev.rdi;2852	u8 rcv_type = rhf_rcv_type(packet->rhf);2853	u8 rte = rhf_rcv_type_err(packet->rhf);2854	struct ib_header *hdr = packet->hdr;2855	struct ib_other_headers *ohdr = NULL;2856	int lnh = be16_to_cpu(hdr->lrh[0]) & 3;2857	u16 lid  = be16_to_cpu(hdr->lrh[1]);2858	u8 opcode;2859	u32 qp_num, psn, ibpsn;2860	struct rvt_qp *qp;2861	struct hfi1_qp_priv *qpriv;2862	unsigned long flags;2863	bool ret = true;2864	struct rvt_ack_entry *e;2865	struct tid_rdma_request *req;2866	struct tid_rdma_flow *flow;2867	int diff = 0;2868 2869	trace_hfi1_msg_handle_kdeth_eflags(NULL, "Kdeth error: rhf ",2870					   packet->rhf);2871	if (packet->rhf & RHF_ICRC_ERR)2872		return ret;2873 2874	packet->ohdr = &hdr->u.oth;2875	ohdr = packet->ohdr;2876	trace_input_ibhdr(rcd->dd, packet, !!(rhf_dc_info(packet->rhf)));2877 2878	/* Get the destination QP number. */2879	qp_num = be32_to_cpu(ohdr->u.tid_rdma.r_rsp.verbs_qp) &2880		RVT_QPN_MASK;2881	if (lid >= be16_to_cpu(IB_MULTICAST_LID_BASE))2882		goto drop;2883 2884	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));2885	opcode = (be32_to_cpu(ohdr->bth[0]) >> 24) & 0xff;2886 2887	rcu_read_lock();2888	qp = rvt_lookup_qpn(rdi, &ibp->rvp, qp_num);2889	if (!qp)2890		goto rcu_unlock;2891 2892	packet->qp = qp;2893 2894	/* Check for valid receive state. */2895	spin_lock_irqsave(&qp->r_lock, flags);2896	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK)) {2897		ibp->rvp.n_pkt_drops++;2898		goto r_unlock;2899	}2900 2901	if (packet->rhf & RHF_TID_ERR) {2902		/* For TIDERR and RC QPs preemptively schedule a NAK */2903		u32 tlen = rhf_pkt_len(packet->rhf); /* in bytes */2904 2905		/* Sanity check packet */2906		if (tlen < 24)2907			goto r_unlock;2908 2909		/*2910		 * Check for GRH. We should never get packets with GRH in this2911		 * path.2912		 */2913		if (lnh == HFI1_LRH_GRH)2914			goto r_unlock;2915 2916		if (tid_rdma_tid_err(packet, rcv_type))2917			goto r_unlock;2918	}2919 2920	/* handle TID RDMA READ */2921	if (opcode == TID_OP(READ_RESP)) {2922		ibpsn = be32_to_cpu(ohdr->u.tid_rdma.r_rsp.verbs_psn);2923		ibpsn = mask_psn(ibpsn);2924		ret = handle_read_kdeth_eflags(rcd, packet, rcv_type, rte, psn,2925					       ibpsn);2926		goto r_unlock;2927	}2928 2929	/*2930	 * qp->s_tail_ack_queue points to the rvt_ack_entry currently being2931	 * processed. These a completed sequentially so we can be sure that2932	 * the pointer will not change until the entire request has completed.2933	 */2934	spin_lock(&qp->s_lock);2935	qpriv = qp->priv;2936	if (qpriv->r_tid_tail == HFI1_QP_WQE_INVALID ||2937	    qpriv->r_tid_tail == qpriv->r_tid_head)2938		goto unlock;2939	e = &qp->s_ack_queue[qpriv->r_tid_tail];2940	if (e->opcode != TID_OP(WRITE_REQ))2941		goto unlock;2942	req = ack_to_tid_req(e);2943	if (req->comp_seg == req->cur_seg)2944		goto unlock;2945	flow = &req->flows[req->clear_tail];2946	trace_hfi1_eflags_err_write(qp, rcv_type, rte, psn);2947	trace_hfi1_rsp_handle_kdeth_eflags(qp, psn);2948	trace_hfi1_tid_write_rsp_handle_kdeth_eflags(qp);2949	trace_hfi1_tid_req_handle_kdeth_eflags(qp, 0, e->opcode, e->psn,2950					       e->lpsn, req);2951	trace_hfi1_tid_flow_handle_kdeth_eflags(qp, req->clear_tail, flow);2952 2953	switch (rcv_type) {2954	case RHF_RCV_TYPE_EXPECTED:2955		switch (rte) {2956		case RHF_RTE_EXPECTED_FLOW_SEQ_ERR:2957			if (!(qpriv->s_flags & HFI1_R_TID_SW_PSN)) {2958				qpriv->s_flags |= HFI1_R_TID_SW_PSN;2959				flow->flow_state.r_next_psn =2960					read_r_next_psn(dd, rcd->ctxt,2961							flow->idx);2962				qpriv->r_next_psn_kdeth =2963					flow->flow_state.r_next_psn;2964				goto nak_psn;2965			} else {2966				/*2967				 * If the received PSN does not match the next2968				 * expected PSN, NAK the packet.2969				 * However, only do that if we know that the a2970				 * NAK has already been sent. Otherwise, this2971				 * mismatch could be due to packets that were2972				 * already in flight.2973				 */2974				diff = cmp_psn(psn,2975					       flow->flow_state.r_next_psn);2976				if (diff > 0)2977					goto nak_psn;2978				else if (diff < 0)2979					break;2980 2981				qpriv->s_nak_state = 0;2982				/*2983				 * If SW PSN verification is successful and this2984				 * is the last packet in the segment, tell the2985				 * caller to process it as a normal packet.2986				 */2987				if (psn == full_flow_psn(flow,2988							 flow->flow_state.lpsn))2989					ret = false;2990				flow->flow_state.r_next_psn =2991					mask_psn(psn + 1);2992				qpriv->r_next_psn_kdeth =2993					flow->flow_state.r_next_psn;2994			}2995			break;2996 2997		case RHF_RTE_EXPECTED_FLOW_GEN_ERR:2998			goto nak_psn;2999 3000		default:3001			break;3002		}3003		break;3004 3005	case RHF_RCV_TYPE_ERROR:3006		switch (rte) {3007		case RHF_RTE_ERROR_OP_CODE_ERR:3008		case RHF_RTE_ERROR_KHDR_MIN_LEN_ERR:3009		case RHF_RTE_ERROR_KHDR_HCRC_ERR:3010		case RHF_RTE_ERROR_KHDR_KVER_ERR:3011		case RHF_RTE_ERROR_CONTEXT_ERR:3012		case RHF_RTE_ERROR_KHDR_TID_ERR:3013		default:3014			break;3015		}3016		break;3017	default:3018		break;3019	}3020 3021unlock:3022	spin_unlock(&qp->s_lock);3023r_unlock:3024	spin_unlock_irqrestore(&qp->r_lock, flags);3025rcu_unlock:3026	rcu_read_unlock();3027drop:3028	return ret;3029nak_psn:3030	ibp->rvp.n_rc_seqnak++;3031	if (!qpriv->s_nak_state) {3032		qpriv->s_nak_state = IB_NAK_PSN_ERROR;3033		/* We are NAK'ing the next expected PSN */3034		qpriv->s_nak_psn = mask_psn(flow->flow_state.r_next_psn);3035		tid_rdma_trigger_ack(qp);3036	}3037	goto unlock;3038}3039 3040/*3041 * "Rewind" the TID request information.3042 * This means that we reset the state back to ACTIVE,3043 * find the proper flow, set the flow index to that flow,3044 * and reset the flow information.3045 */3046void hfi1_tid_rdma_restart_req(struct rvt_qp *qp, struct rvt_swqe *wqe,3047			       u32 *bth2)3048{3049	struct tid_rdma_request *req = wqe_to_tid_req(wqe);3050	struct tid_rdma_flow *flow;3051	struct hfi1_qp_priv *qpriv = qp->priv;3052	int diff, delta_pkts;3053	u32 tididx = 0, i;3054	u16 fidx;3055 3056	if (wqe->wr.opcode == IB_WR_TID_RDMA_READ) {3057		*bth2 = mask_psn(qp->s_psn);3058		flow = find_flow_ib(req, *bth2, &fidx);3059		if (!flow) {3060			trace_hfi1_msg_tid_restart_req(/* msg */3061			   qp, "!!!!!! Could not find flow to restart: bth2 ",3062			   (u64)*bth2);3063			trace_hfi1_tid_req_restart_req(qp, 0, wqe->wr.opcode,3064						       wqe->psn, wqe->lpsn,3065						       req);3066			return;3067		}3068	} else {3069		fidx = req->acked_tail;3070		flow = &req->flows[fidx];3071		*bth2 = mask_psn(req->r_ack_psn);3072	}3073 3074	if (wqe->wr.opcode == IB_WR_TID_RDMA_READ)3075		delta_pkts = delta_psn(*bth2, flow->flow_state.ib_spsn);3076	else3077		delta_pkts = delta_psn(*bth2,3078				       full_flow_psn(flow,3079						     flow->flow_state.spsn));3080 3081	trace_hfi1_tid_flow_restart_req(qp, fidx, flow);3082	diff = delta_pkts + flow->resync_npkts;3083 3084	flow->sent = 0;3085	flow->pkt = 0;3086	flow->tid_idx = 0;3087	flow->tid_offset = 0;3088	if (diff) {3089		for (tididx = 0; tididx < flow->tidcnt; tididx++) {3090			u32 tidentry = flow->tid_entry[tididx], tidlen,3091				tidnpkts, npkts;3092 3093			flow->tid_offset = 0;3094			tidlen = EXP_TID_GET(tidentry, LEN) * PAGE_SIZE;3095			tidnpkts = rvt_div_round_up_mtu(qp, tidlen);3096			npkts = min_t(u32, diff, tidnpkts);3097			flow->pkt += npkts;3098			flow->sent += (npkts == tidnpkts ? tidlen :3099				       npkts * qp->pmtu);3100			flow->tid_offset += npkts * qp->pmtu;3101			diff -= npkts;3102			if (!diff)3103				break;3104		}3105	}3106	if (wqe->wr.opcode == IB_WR_TID_RDMA_WRITE) {3107		rvt_skip_sge(&qpriv->tid_ss, (req->cur_seg * req->seg_len) +3108			     flow->sent, 0);3109		/*3110		 * Packet PSN is based on flow_state.spsn + flow->pkt. However,3111		 * during a RESYNC, the generation is incremented and the3112		 * sequence is reset to 0. Since we've adjusted the npkts in the3113		 * flow and the SGE has been sufficiently advanced, we have to3114		 * adjust flow->pkt in order to calculate the correct PSN.3115		 */3116		flow->pkt -= flow->resync_npkts;3117	}3118 3119	if (flow->tid_offset ==3120	    EXP_TID_GET(flow->tid_entry[tididx], LEN) * PAGE_SIZE) {3121		tididx++;3122		flow->tid_offset = 0;3123	}3124	flow->tid_idx = tididx;3125	if (wqe->wr.opcode == IB_WR_TID_RDMA_READ)3126		/* Move flow_idx to correct index */3127		req->flow_idx = fidx;3128	else3129		req->clear_tail = fidx;3130 3131	trace_hfi1_tid_flow_restart_req(qp, fidx, flow);3132	trace_hfi1_tid_req_restart_req(qp, 0, wqe->wr.opcode, wqe->psn,3133				       wqe->lpsn, req);3134	req->state = TID_REQUEST_ACTIVE;3135	if (wqe->wr.opcode == IB_WR_TID_RDMA_WRITE) {3136		/* Reset all the flows that we are going to resend */3137		fidx = CIRC_NEXT(fidx, MAX_FLOWS);3138		i = qpriv->s_tid_tail;3139		do {3140			for (; CIRC_CNT(req->setup_head, fidx, MAX_FLOWS);3141			      fidx = CIRC_NEXT(fidx, MAX_FLOWS)) {3142				req->flows[fidx].sent = 0;3143				req->flows[fidx].pkt = 0;3144				req->flows[fidx].tid_idx = 0;3145				req->flows[fidx].tid_offset = 0;3146				req->flows[fidx].resync_npkts = 0;3147			}3148			if (i == qpriv->s_tid_cur)3149				break;3150			do {3151				i = (++i == qp->s_size ? 0 : i);3152				wqe = rvt_get_swqe_ptr(qp, i);3153			} while (wqe->wr.opcode != IB_WR_TID_RDMA_WRITE);3154			req = wqe_to_tid_req(wqe);3155			req->cur_seg = req->ack_seg;3156			fidx = req->acked_tail;3157			/* Pull req->clear_tail back */3158			req->clear_tail = fidx;3159		} while (1);3160	}3161}3162 3163void hfi1_qp_kern_exp_rcv_clear_all(struct rvt_qp *qp)3164{3165	int i, ret;3166	struct hfi1_qp_priv *qpriv = qp->priv;3167	struct tid_flow_state *fs;3168 3169	if (qp->ibqp.qp_type != IB_QPT_RC || !HFI1_CAP_IS_KSET(TID_RDMA))3170		return;3171 3172	/*3173	 * First, clear the flow to help prevent any delayed packets from3174	 * being delivered.3175	 */3176	fs = &qpriv->flow_state;3177	if (fs->index != RXE_NUM_TID_FLOWS)3178		hfi1_kern_clear_hw_flow(qpriv->rcd, qp);3179 3180	for (i = qp->s_acked; i != qp->s_head;) {3181		struct rvt_swqe *wqe = rvt_get_swqe_ptr(qp, i);3182 3183		if (++i == qp->s_size)3184			i = 0;3185		/* Free only locally allocated TID entries */3186		if (wqe->wr.opcode != IB_WR_TID_RDMA_READ)3187			continue;3188		do {3189			struct hfi1_swqe_priv *priv = wqe->priv;3190 3191			ret = hfi1_kern_exp_rcv_clear(&priv->tid_req);3192		} while (!ret);3193	}3194	for (i = qp->s_acked_ack_queue; i != qp->r_head_ack_queue;) {3195		struct rvt_ack_entry *e = &qp->s_ack_queue[i];3196 3197		if (++i == rvt_max_atomic(ib_to_rvt(qp->ibqp.device)))3198			i = 0;3199		/* Free only locally allocated TID entries */3200		if (e->opcode != TID_OP(WRITE_REQ))3201			continue;3202		do {3203			struct hfi1_ack_priv *priv = e->priv;3204 3205			ret = hfi1_kern_exp_rcv_clear(&priv->tid_req);3206		} while (!ret);3207	}3208}3209 3210bool hfi1_tid_rdma_wqe_interlock(struct rvt_qp *qp, struct rvt_swqe *wqe)3211{3212	struct rvt_swqe *prev;3213	struct hfi1_qp_priv *priv = qp->priv;3214	u32 s_prev;3215	struct tid_rdma_request *req;3216 3217	s_prev = (qp->s_cur == 0 ? qp->s_size : qp->s_cur) - 1;3218	prev = rvt_get_swqe_ptr(qp, s_prev);3219 3220	switch (wqe->wr.opcode) {3221	case IB_WR_SEND:3222	case IB_WR_SEND_WITH_IMM:3223	case IB_WR_SEND_WITH_INV:3224	case IB_WR_ATOMIC_CMP_AND_SWP:3225	case IB_WR_ATOMIC_FETCH_AND_ADD:3226	case IB_WR_RDMA_WRITE:3227	case IB_WR_RDMA_WRITE_WITH_IMM:3228		switch (prev->wr.opcode) {3229		case IB_WR_TID_RDMA_WRITE:3230			req = wqe_to_tid_req(prev);3231			if (req->ack_seg != req->total_segs)3232				goto interlock;3233			break;3234		default:3235			break;3236		}3237		break;3238	case IB_WR_RDMA_READ:3239		if (prev->wr.opcode != IB_WR_TID_RDMA_WRITE)3240			break;3241		fallthrough;3242	case IB_WR_TID_RDMA_READ:3243		switch (prev->wr.opcode) {3244		case IB_WR_RDMA_READ:3245			if (qp->s_acked != qp->s_cur)3246				goto interlock;3247			break;3248		case IB_WR_TID_RDMA_WRITE:3249			req = wqe_to_tid_req(prev);3250			if (req->ack_seg != req->total_segs)3251				goto interlock;3252			break;3253		default:3254			break;3255		}3256		break;3257	default:3258		break;3259	}3260	return false;3261 3262interlock:3263	priv->s_flags |= HFI1_S_TID_WAIT_INTERLCK;3264	return true;3265}3266 3267/* Does @sge meet the alignment requirements for tid rdma? */3268static inline bool hfi1_check_sge_align(struct rvt_qp *qp,3269					struct rvt_sge *sge, int num_sge)3270{3271	int i;3272 3273	for (i = 0; i < num_sge; i++, sge++) {3274		trace_hfi1_sge_check_align(qp, i, sge);3275		if ((u64)sge->vaddr & ~PAGE_MASK ||3276		    sge->sge_length & ~PAGE_MASK)3277			return false;3278	}3279	return true;3280}3281 3282void setup_tid_rdma_wqe(struct rvt_qp *qp, struct rvt_swqe *wqe)3283{3284	struct hfi1_qp_priv *qpriv = (struct hfi1_qp_priv *)qp->priv;3285	struct hfi1_swqe_priv *priv = wqe->priv;3286	struct tid_rdma_params *remote;3287	enum ib_wr_opcode new_opcode;3288	bool do_tid_rdma = false;3289	struct hfi1_pportdata *ppd = qpriv->rcd->ppd;3290 3291	if ((rdma_ah_get_dlid(&qp->remote_ah_attr) & ~((1 << ppd->lmc) - 1)) ==3292				ppd->lid)3293		return;3294	if (qpriv->hdr_type != HFI1_PKT_TYPE_9B)3295		return;3296 3297	rcu_read_lock();3298	remote = rcu_dereference(qpriv->tid_rdma.remote);3299	/*3300	 * If TID RDMA is disabled by the negotiation, don't3301	 * use it.3302	 */3303	if (!remote)3304		goto exit;3305 3306	if (wqe->wr.opcode == IB_WR_RDMA_READ) {3307		if (hfi1_check_sge_align(qp, &wqe->sg_list[0],3308					 wqe->wr.num_sge)) {3309			new_opcode = IB_WR_TID_RDMA_READ;3310			do_tid_rdma = true;3311		}3312	} else if (wqe->wr.opcode == IB_WR_RDMA_WRITE) {3313		/*3314		 * TID RDMA is enabled for this RDMA WRITE request iff:3315		 *   1. The remote address is page-aligned,3316		 *   2. The length is larger than the minimum segment size,3317		 *   3. The length is page-multiple.3318		 */3319		if (!(wqe->rdma_wr.remote_addr & ~PAGE_MASK) &&3320		    !(wqe->length & ~PAGE_MASK)) {3321			new_opcode = IB_WR_TID_RDMA_WRITE;3322			do_tid_rdma = true;3323		}3324	}3325 3326	if (do_tid_rdma) {3327		if (hfi1_kern_exp_rcv_alloc_flows(&priv->tid_req, GFP_ATOMIC))3328			goto exit;3329		wqe->wr.opcode = new_opcode;3330		priv->tid_req.seg_len =3331			min_t(u32, remote->max_len, wqe->length);3332		priv->tid_req.total_segs =3333			DIV_ROUND_UP(wqe->length, priv->tid_req.seg_len);3334		/* Compute the last PSN of the request */3335		wqe->lpsn = wqe->psn;3336		if (wqe->wr.opcode == IB_WR_TID_RDMA_READ) {3337			priv->tid_req.n_flows = remote->max_read;3338			qpriv->tid_r_reqs++;3339			wqe->lpsn += rvt_div_round_up_mtu(qp, wqe->length) - 1;3340		} else {3341			wqe->lpsn += priv->tid_req.total_segs - 1;3342			atomic_inc(&qpriv->n_requests);3343		}3344 3345		priv->tid_req.cur_seg = 0;3346		priv->tid_req.comp_seg = 0;3347		priv->tid_req.ack_seg = 0;3348		priv->tid_req.state = TID_REQUEST_INACTIVE;3349		/*3350		 * Reset acked_tail.3351		 * TID RDMA READ does not have ACKs so it does not3352		 * update the pointer. We have to reset it so TID RDMA3353		 * WRITE does not get confused.3354		 */3355		priv->tid_req.acked_tail = priv->tid_req.setup_head;3356		trace_hfi1_tid_req_setup_tid_wqe(qp, 1, wqe->wr.opcode,3357						 wqe->psn, wqe->lpsn,3358						 &priv->tid_req);3359	}3360exit:3361	rcu_read_unlock();3362}3363 3364/* TID RDMA WRITE functions */3365 3366u32 hfi1_build_tid_rdma_write_req(struct rvt_qp *qp, struct rvt_swqe *wqe,3367				  struct ib_other_headers *ohdr,3368				  u32 *bth1, u32 *bth2, u32 *len)3369{3370	struct hfi1_qp_priv *qpriv = qp->priv;3371	struct tid_rdma_request *req = wqe_to_tid_req(wqe);3372	struct tid_rdma_params *remote;3373 3374	rcu_read_lock();3375	remote = rcu_dereference(qpriv->tid_rdma.remote);3376	/*3377	 * Set the number of flow to be used based on negotiated3378	 * parameters.3379	 */3380	req->n_flows = remote->max_write;3381	req->state = TID_REQUEST_ACTIVE;3382 3383	KDETH_RESET(ohdr->u.tid_rdma.w_req.kdeth0, KVER, 0x1);3384	KDETH_RESET(ohdr->u.tid_rdma.w_req.kdeth1, JKEY, remote->jkey);3385	ohdr->u.tid_rdma.w_req.reth.vaddr =3386		cpu_to_be64(wqe->rdma_wr.remote_addr + (wqe->length - *len));3387	ohdr->u.tid_rdma.w_req.reth.rkey =3388		cpu_to_be32(wqe->rdma_wr.rkey);3389	ohdr->u.tid_rdma.w_req.reth.length = cpu_to_be32(*len);3390	ohdr->u.tid_rdma.w_req.verbs_qp = cpu_to_be32(qp->remote_qpn);3391	*bth1 &= ~RVT_QPN_MASK;3392	*bth1 |= remote->qp;3393	qp->s_state = TID_OP(WRITE_REQ);3394	qp->s_flags |= HFI1_S_WAIT_TID_RESP;3395	*bth2 |= IB_BTH_REQ_ACK;3396	*len = 0;3397 3398	rcu_read_unlock();3399	return sizeof(ohdr->u.tid_rdma.w_req) / sizeof(u32);3400}3401 3402static u32 hfi1_compute_tid_rdma_flow_wt(struct rvt_qp *qp)3403{3404	/*3405	 * Heuristic for computing the RNR timeout when waiting on the flow3406	 * queue. Rather than a computationaly expensive exact estimate of when3407	 * a flow will be available, we assume that if a QP is at position N in3408	 * the flow queue it has to wait approximately (N + 1) * (number of3409	 * segments between two sync points). The rationale for this is that3410	 * flows are released and recycled at each sync point.3411	 */3412	return (MAX_TID_FLOW_PSN * qp->pmtu) >> TID_RDMA_SEGMENT_SHIFT;3413}3414 3415static u32 position_in_queue(struct hfi1_qp_priv *qpriv,3416			     struct tid_queue *queue)3417{3418	return qpriv->tid_enqueue - queue->dequeue;3419}3420 3421/*3422 * @qp: points to rvt_qp context.3423 * @to_seg: desired RNR timeout in segments.3424 * Return: index of the next highest timeout in the ib_hfi1_rnr_table[]3425 */3426static u32 hfi1_compute_tid_rnr_timeout(struct rvt_qp *qp, u32 to_seg)3427{3428	struct hfi1_qp_priv *qpriv = qp->priv;3429	u64 timeout;3430	u32 bytes_per_us;3431	u8 i;3432 3433	bytes_per_us = active_egress_rate(qpriv->rcd->ppd) / 8;3434	timeout = (to_seg * TID_RDMA_MAX_SEGMENT_SIZE) / bytes_per_us;3435	/*3436	 * Find the next highest value in the RNR table to the required3437	 * timeout. This gives the responder some padding.3438	 */3439	for (i = 1; i <= IB_AETH_CREDIT_MASK; i++)3440		if (rvt_rnr_tbl_to_usec(i) >= timeout)3441			return i;3442	return 0;3443}3444 3445/*3446 * Central place for resource allocation at TID write responder,3447 * is called from write_req and write_data interrupt handlers as3448 * well as the send thread when a queued QP is scheduled for3449 * resource allocation.3450 *3451 * Iterates over (a) segments of a request and then (b) queued requests3452 * themselves to allocate resources for up to local->max_write3453 * segments across multiple requests. Stop allocating when we3454 * hit a sync point, resume allocating after data packets at3455 * sync point have been received.3456 *3457 * Resource allocation and sending of responses is decoupled. The3458 * request/segment which are being allocated and sent are as follows.3459 * Resources are allocated for:3460 *     [request: qpriv->r_tid_alloc, segment: req->alloc_seg]3461 * The send thread sends:3462 *     [request: qp->s_tail_ack_queue, segment:req->cur_seg]3463 */3464static void hfi1_tid_write_alloc_resources(struct rvt_qp *qp, bool intr_ctx)3465{3466	struct tid_rdma_request *req;3467	struct hfi1_qp_priv *qpriv = qp->priv;3468	struct hfi1_ctxtdata *rcd = qpriv->rcd;3469	struct tid_rdma_params *local = &qpriv->tid_rdma.local;3470	struct rvt_ack_entry *e;3471	u32 npkts, to_seg;3472	bool last;3473	int ret = 0;3474 3475	lockdep_assert_held(&qp->s_lock);3476 3477	while (1) {3478		trace_hfi1_rsp_tid_write_alloc_res(qp, 0);3479		trace_hfi1_tid_write_rsp_alloc_res(qp);3480		/*3481		 * Don't allocate more segments if a RNR NAK has already been3482		 * scheduled to avoid messing up qp->r_psn: the RNR NAK will3483		 * be sent only when all allocated segments have been sent.3484		 * However, if more segments are allocated before that, TID RDMA3485		 * WRITE RESP packets will be sent out for these new segments3486		 * before the RNR NAK packet. When the requester receives the3487		 * RNR NAK packet, it will restart with qp->s_last_psn + 1,3488		 * which does not match qp->r_psn and will be dropped.3489		 * Consequently, the requester will exhaust its retries and3490		 * put the qp into error state.3491		 */3492		if (qpriv->rnr_nak_state == TID_RNR_NAK_SEND)3493			break;3494 3495		/* No requests left to process */3496		if (qpriv->r_tid_alloc == qpriv->r_tid_head) {3497			/* If all data has been received, clear the flow */3498			if (qpriv->flow_state.index < RXE_NUM_TID_FLOWS &&3499			    !qpriv->alloc_w_segs) {3500				hfi1_kern_clear_hw_flow(rcd, qp);3501				qpriv->s_flags &= ~HFI1_R_TID_SW_PSN;3502			}3503			break;3504		}3505 3506		e = &qp->s_ack_queue[qpriv->r_tid_alloc];3507		if (e->opcode != TID_OP(WRITE_REQ))3508			goto next_req;3509		req = ack_to_tid_req(e);3510		trace_hfi1_tid_req_write_alloc_res(qp, 0, e->opcode, e->psn,3511						   e->lpsn, req);3512		/* Finished allocating for all segments of this request */3513		if (req->alloc_seg >= req->total_segs)3514			goto next_req;3515 3516		/* Can allocate only a maximum of local->max_write for a QP */3517		if (qpriv->alloc_w_segs >= local->max_write)3518			break;3519 3520		/* Don't allocate at a sync point with data packets pending */3521		if (qpriv->sync_pt && qpriv->alloc_w_segs)3522			break;3523 3524		/* All data received at the sync point, continue */3525		if (qpriv->sync_pt && !qpriv->alloc_w_segs) {3526			hfi1_kern_clear_hw_flow(rcd, qp);3527			qpriv->sync_pt = false;3528			qpriv->s_flags &= ~HFI1_R_TID_SW_PSN;3529		}3530 3531		/* Allocate flow if we don't have one */3532		if (qpriv->flow_state.index >= RXE_NUM_TID_FLOWS) {3533			ret = hfi1_kern_setup_hw_flow(qpriv->rcd, qp);3534			if (ret) {3535				to_seg = hfi1_compute_tid_rdma_flow_wt(qp) *3536					position_in_queue(qpriv,3537							  &rcd->flow_queue);3538				break;3539			}3540		}3541 3542		npkts = rvt_div_round_up_mtu(qp, req->seg_len);3543 3544		/*3545		 * We are at a sync point if we run out of KDETH PSN space.3546		 * Last PSN of every generation is reserved for RESYNC.3547		 */3548		if (qpriv->flow_state.psn + npkts > MAX_TID_FLOW_PSN - 1) {3549			qpriv->sync_pt = true;3550			break;3551		}3552 3553		/*3554		 * If overtaking req->acked_tail, send an RNR NAK. Because the3555		 * QP is not queued in this case, and the issue can only be3556		 * caused by a delay in scheduling the second leg which we3557		 * cannot estimate, we use a rather arbitrary RNR timeout of3558		 * (MAX_FLOWS / 2) segments3559		 */3560		if (!CIRC_SPACE(req->setup_head, req->acked_tail,3561				MAX_FLOWS)) {3562			ret = -EAGAIN;3563			to_seg = MAX_FLOWS >> 1;3564			tid_rdma_trigger_ack(qp);3565			break;3566		}3567 3568		/* Try to allocate rcv array / TID entries */3569		ret = hfi1_kern_exp_rcv_setup(req, &req->ss, &last);3570		if (ret == -EAGAIN)3571			to_seg = position_in_queue(qpriv, &rcd->rarr_queue);3572		if (ret)3573			break;3574 3575		qpriv->alloc_w_segs++;3576		req->alloc_seg++;3577		continue;3578next_req:3579		/* Begin processing the next request */3580		if (++qpriv->r_tid_alloc >3581		    rvt_size_atomic(ib_to_rvt(qp->ibqp.device)))3582			qpriv->r_tid_alloc = 0;3583	}3584 3585	/*3586	 * Schedule an RNR NAK to be sent if (a) flow or rcv array allocation3587	 * has failed (b) we are called from the rcv handler interrupt context3588	 * (c) an RNR NAK has not already been scheduled3589	 */3590	if (ret == -EAGAIN && intr_ctx && !qp->r_nak_state)3591		goto send_rnr_nak;3592 3593	return;3594 3595send_rnr_nak:3596	lockdep_assert_held(&qp->r_lock);3597 3598	/* Set r_nak_state to prevent unrelated events from generating NAK's */3599	qp->r_nak_state = hfi1_compute_tid_rnr_timeout(qp, to_seg) | IB_RNR_NAK;3600 3601	/* Pull back r_psn to the segment being RNR NAK'd */3602	qp->r_psn = e->psn + req->alloc_seg;3603	qp->r_ack_psn = qp->r_psn;3604	/*3605	 * Pull back r_head_ack_queue to the ack entry following the request3606	 * being RNR NAK'd. This allows resources to be allocated to the request3607	 * if the queued QP is scheduled.3608	 */3609	qp->r_head_ack_queue = qpriv->r_tid_alloc + 1;3610	if (qp->r_head_ack_queue > rvt_size_atomic(ib_to_rvt(qp->ibqp.device)))3611		qp->r_head_ack_queue = 0;3612	qpriv->r_tid_head = qp->r_head_ack_queue;3613	/*3614	 * These send side fields are used in make_rc_ack(). They are set in3615	 * hfi1_send_rc_ack() but must be set here before dropping qp->s_lock3616	 * for consistency3617	 */3618	qp->s_nak_state = qp->r_nak_state;3619	qp->s_ack_psn = qp->r_ack_psn;3620	/*3621	 * Clear the ACK PENDING flag to prevent unwanted ACK because we3622	 * have modified qp->s_ack_psn here.3623	 */3624	qp->s_flags &= ~(RVT_S_ACK_PENDING);3625 3626	trace_hfi1_rsp_tid_write_alloc_res(qp, qp->r_psn);3627	/*3628	 * qpriv->rnr_nak_state is used to determine when the scheduled RNR NAK3629	 * has actually been sent. qp->s_flags RVT_S_ACK_PENDING bit cannot be3630	 * used for this because qp->s_lock is dropped before calling3631	 * hfi1_send_rc_ack() leading to inconsistency between the receive3632	 * interrupt handlers and the send thread in make_rc_ack()3633	 */3634	qpriv->rnr_nak_state = TID_RNR_NAK_SEND;3635 3636	/*3637	 * Schedule RNR NAK to be sent. RNR NAK's are scheduled from the receive3638	 * interrupt handlers but will be sent from the send engine behind any3639	 * previous responses that may have been scheduled3640	 */3641	rc_defered_ack(rcd, qp);3642}3643 3644void hfi1_rc_rcv_tid_rdma_write_req(struct hfi1_packet *packet)3645{3646	/* HANDLER FOR TID RDMA WRITE REQUEST packet (Responder side)*/3647 3648	/*3649	 * 1. Verify TID RDMA WRITE REQ as per IB_OPCODE_RC_RDMA_WRITE_FIRST3650	 *    (see hfi1_rc_rcv())3651	 *     - Don't allow 0-length requests.3652	 * 2. Put TID RDMA WRITE REQ into the response queue (s_ack_queue)3653	 *     - Setup struct tid_rdma_req with request info3654	 *     - Prepare struct tid_rdma_flow array?3655	 * 3. Set the qp->s_ack_state as state diagram in design doc.3656	 * 4. Set RVT_S_RESP_PENDING in s_flags.3657	 * 5. Kick the send engine (hfi1_schedule_send())3658	 */3659	struct hfi1_ctxtdata *rcd = packet->rcd;3660	struct rvt_qp *qp = packet->qp;3661	struct hfi1_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);3662	struct ib_other_headers *ohdr = packet->ohdr;3663	struct rvt_ack_entry *e;3664	unsigned long flags;3665	struct ib_reth *reth;3666	struct hfi1_qp_priv *qpriv = qp->priv;3667	struct tid_rdma_request *req;3668	u32 bth0, psn, len, rkey, num_segs;3669	bool fecn;3670	u8 next;3671	u64 vaddr;3672	int diff;3673 3674	bth0 = be32_to_cpu(ohdr->bth[0]);3675	if (hfi1_ruc_check_hdr(ibp, packet))3676		return;3677 3678	fecn = process_ecn(qp, packet);3679	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));3680	trace_hfi1_rsp_rcv_tid_write_req(qp, psn);3681 3682	if (qp->state == IB_QPS_RTR && !(qp->r_flags & RVT_R_COMM_EST))3683		rvt_comm_est(qp);3684 3685	if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_WRITE)))3686		goto nack_inv;3687 3688	reth = &ohdr->u.tid_rdma.w_req.reth;3689	vaddr = be64_to_cpu(reth->vaddr);3690	len = be32_to_cpu(reth->length);3691 3692	num_segs = DIV_ROUND_UP(len, qpriv->tid_rdma.local.max_len);3693	diff = delta_psn(psn, qp->r_psn);3694	if (unlikely(diff)) {3695		tid_rdma_rcv_err(packet, ohdr, qp, psn, diff, fecn);3696		return;3697	}3698 3699	/*3700	 * The resent request which was previously RNR NAK'd is inserted at the3701	 * location of the original request, which is one entry behind3702	 * r_head_ack_queue3703	 */3704	if (qpriv->rnr_nak_state)3705		qp->r_head_ack_queue = qp->r_head_ack_queue ?3706			qp->r_head_ack_queue - 1 :3707			rvt_size_atomic(ib_to_rvt(qp->ibqp.device));3708 3709	/* We've verified the request, insert it into the ack queue. */3710	next = qp->r_head_ack_queue + 1;3711	if (next > rvt_size_atomic(ib_to_rvt(qp->ibqp.device)))3712		next = 0;3713	spin_lock_irqsave(&qp->s_lock, flags);3714	if (unlikely(next == qp->s_acked_ack_queue)) {3715		if (!qp->s_ack_queue[next].sent)3716			goto nack_inv_unlock;3717		update_ack_queue(qp, next);3718	}3719	e = &qp->s_ack_queue[qp->r_head_ack_queue];3720	req = ack_to_tid_req(e);3721 3722	/* Bring previously RNR NAK'd request back to life */3723	if (qpriv->rnr_nak_state) {3724		qp->r_nak_state = 0;3725		qp->s_nak_state = 0;3726		qpriv->rnr_nak_state = TID_RNR_NAK_INIT;3727		qp->r_psn = e->lpsn + 1;3728		req->state = TID_REQUEST_INIT;3729		goto update_head;3730	}3731 3732	release_rdma_sge_mr(e);3733 3734	/* The length needs to be in multiples of PAGE_SIZE */3735	if (!len || len & ~PAGE_MASK)3736		goto nack_inv_unlock;3737 3738	rkey = be32_to_cpu(reth->rkey);3739	qp->r_len = len;3740 3741	if (e->opcode == TID_OP(WRITE_REQ) &&3742	    (req->setup_head != req->clear_tail ||3743	     req->clear_tail != req->acked_tail))3744		goto nack_inv_unlock;3745 3746	if (unlikely(!rvt_rkey_ok(qp, &e->rdma_sge, qp->r_len, vaddr,3747				  rkey, IB_ACCESS_REMOTE_WRITE)))3748		goto nack_acc;3749 3750	qp->r_psn += num_segs - 1;3751 3752	e->opcode = (bth0 >> 24) & 0xff;3753	e->psn = psn;3754	e->lpsn = qp->r_psn;3755	e->sent = 0;3756 3757	req->n_flows = min_t(u16, num_segs, qpriv->tid_rdma.local.max_write);3758	req->state = TID_REQUEST_INIT;3759	req->cur_seg = 0;3760	req->comp_seg = 0;3761	req->ack_seg = 0;3762	req->alloc_seg = 0;3763	req->isge = 0;3764	req->seg_len = qpriv->tid_rdma.local.max_len;3765	req->total_len = len;3766	req->total_segs = num_segs;3767	req->r_flow_psn = e->psn;3768	req->ss.sge = e->rdma_sge;3769	req->ss.num_sge = 1;3770 3771	req->flow_idx = req->setup_head;3772	req->clear_tail = req->setup_head;3773	req->acked_tail = req->setup_head;3774 3775	qp->r_state = e->opcode;3776	qp->r_nak_state = 0;3777	/*3778	 * We need to increment the MSN here instead of when we3779	 * finish sending the result since a duplicate request would3780	 * increment it more than once.3781	 */3782	qp->r_msn++;3783	qp->r_psn++;3784 3785	trace_hfi1_tid_req_rcv_write_req(qp, 0, e->opcode, e->psn, e->lpsn,3786					 req);3787 3788	if (qpriv->r_tid_tail == HFI1_QP_WQE_INVALID) {3789		qpriv->r_tid_tail = qp->r_head_ack_queue;3790	} else if (qpriv->r_tid_tail == qpriv->r_tid_head) {3791		struct tid_rdma_request *ptr;3792 3793		e = &qp->s_ack_queue[qpriv->r_tid_tail];3794		ptr = ack_to_tid_req(e);3795 3796		if (e->opcode != TID_OP(WRITE_REQ) ||3797		    ptr->comp_seg == ptr->total_segs) {3798			if (qpriv->r_tid_tail == qpriv->r_tid_ack)3799				qpriv->r_tid_ack = qp->r_head_ack_queue;3800			qpriv->r_tid_tail = qp->r_head_ack_queue;3801		}3802	}3803update_head:3804	qp->r_head_ack_queue = next;3805	qpriv->r_tid_head = qp->r_head_ack_queue;3806 3807	hfi1_tid_write_alloc_resources(qp, true);3808	trace_hfi1_tid_write_rsp_rcv_req(qp);3809 3810	/* Schedule the send tasklet. */3811	qp->s_flags |= RVT_S_RESP_PENDING;3812	if (fecn)3813		qp->s_flags |= RVT_S_ECN;3814	hfi1_schedule_send(qp);3815 3816	spin_unlock_irqrestore(&qp->s_lock, flags);3817	return;3818 3819nack_inv_unlock:3820	spin_unlock_irqrestore(&qp->s_lock, flags);3821nack_inv:3822	rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);3823	qp->r_nak_state = IB_NAK_INVALID_REQUEST;3824	qp->r_ack_psn = qp->r_psn;3825	/* Queue NAK for later */3826	rc_defered_ack(rcd, qp);3827	return;3828nack_acc:3829	spin_unlock_irqrestore(&qp->s_lock, flags);3830	rvt_rc_error(qp, IB_WC_LOC_PROT_ERR);3831	qp->r_nak_state = IB_NAK_REMOTE_ACCESS_ERROR;3832	qp->r_ack_psn = qp->r_psn;3833}3834 3835u32 hfi1_build_tid_rdma_write_resp(struct rvt_qp *qp, struct rvt_ack_entry *e,3836				   struct ib_other_headers *ohdr, u32 *bth1,3837				   u32 bth2, u32 *len,3838				   struct rvt_sge_state **ss)3839{3840	struct hfi1_ack_priv *epriv = e->priv;3841	struct tid_rdma_request *req = &epriv->tid_req;3842	struct hfi1_qp_priv *qpriv = qp->priv;3843	struct tid_rdma_flow *flow = NULL;3844	u32 resp_len = 0, hdwords = 0;3845	void *resp_addr = NULL;3846	struct tid_rdma_params *remote;3847 3848	trace_hfi1_tid_req_build_write_resp(qp, 0, e->opcode, e->psn, e->lpsn,3849					    req);3850	trace_hfi1_tid_write_rsp_build_resp(qp);3851	trace_hfi1_rsp_build_tid_write_resp(qp, bth2);3852	flow = &req->flows[req->flow_idx];3853	switch (req->state) {3854	default:3855		/*3856		 * Try to allocate resources here in case QP was queued and was3857		 * later scheduled when resources became available3858		 */3859		hfi1_tid_write_alloc_resources(qp, false);3860 3861		/* We've already sent everything which is ready */3862		if (req->cur_seg >= req->alloc_seg)3863			goto done;3864 3865		/*3866		 * Resources can be assigned but responses cannot be sent in3867		 * rnr_nak state, till the resent request is received3868		 */3869		if (qpriv->rnr_nak_state == TID_RNR_NAK_SENT)3870			goto done;3871 3872		req->state = TID_REQUEST_ACTIVE;3873		trace_hfi1_tid_flow_build_write_resp(qp, req->flow_idx, flow);3874		req->flow_idx = CIRC_NEXT(req->flow_idx, MAX_FLOWS);3875		hfi1_add_tid_reap_timer(qp);3876		break;3877 3878	case TID_REQUEST_RESEND_ACTIVE:3879	case TID_REQUEST_RESEND:3880		trace_hfi1_tid_flow_build_write_resp(qp, req->flow_idx, flow);3881		req->flow_idx = CIRC_NEXT(req->flow_idx, MAX_FLOWS);3882		if (!CIRC_CNT(req->setup_head, req->flow_idx, MAX_FLOWS))3883			req->state = TID_REQUEST_ACTIVE;3884 3885		hfi1_mod_tid_reap_timer(qp);3886		break;3887	}3888	flow->flow_state.resp_ib_psn = bth2;3889	resp_addr = (void *)flow->tid_entry;3890	resp_len = sizeof(*flow->tid_entry) * flow->tidcnt;3891	req->cur_seg++;3892 3893	memset(&ohdr->u.tid_rdma.w_rsp, 0, sizeof(ohdr->u.tid_rdma.w_rsp));3894	epriv->ss.sge.vaddr = resp_addr;3895	epriv->ss.sge.sge_length = resp_len;3896	epriv->ss.sge.length = epriv->ss.sge.sge_length;3897	/*3898	 * We can safely zero these out. Since the first SGE covers the3899	 * entire packet, nothing else should even look at the MR.3900	 */3901	epriv->ss.sge.mr = NULL;3902	epriv->ss.sge.m = 0;3903	epriv->ss.sge.n = 0;3904 3905	epriv->ss.sg_list = NULL;3906	epriv->ss.total_len = epriv->ss.sge.sge_length;3907	epriv->ss.num_sge = 1;3908 3909	*ss = &epriv->ss;3910	*len = epriv->ss.total_len;3911 3912	/* Construct the TID RDMA WRITE RESP packet header */3913	rcu_read_lock();3914	remote = rcu_dereference(qpriv->tid_rdma.remote);3915 3916	KDETH_RESET(ohdr->u.tid_rdma.w_rsp.kdeth0, KVER, 0x1);3917	KDETH_RESET(ohdr->u.tid_rdma.w_rsp.kdeth1, JKEY, remote->jkey);3918	ohdr->u.tid_rdma.w_rsp.aeth = rvt_compute_aeth(qp);3919	ohdr->u.tid_rdma.w_rsp.tid_flow_psn =3920		cpu_to_be32((flow->flow_state.generation <<3921			     HFI1_KDETH_BTH_SEQ_SHIFT) |3922			    (flow->flow_state.spsn &3923			     HFI1_KDETH_BTH_SEQ_MASK));3924	ohdr->u.tid_rdma.w_rsp.tid_flow_qp =3925		cpu_to_be32(qpriv->tid_rdma.local.qp |3926			    ((flow->idx & TID_RDMA_DESTQP_FLOW_MASK) <<3927			     TID_RDMA_DESTQP_FLOW_SHIFT) |3928			    qpriv->rcd->ctxt);3929	ohdr->u.tid_rdma.w_rsp.verbs_qp = cpu_to_be32(qp->remote_qpn);3930	*bth1 = remote->qp;3931	rcu_read_unlock();3932	hdwords = sizeof(ohdr->u.tid_rdma.w_rsp) / sizeof(u32);3933	qpriv->pending_tid_w_segs++;3934done:3935	return hdwords;3936}3937 3938static void hfi1_add_tid_reap_timer(struct rvt_qp *qp)3939{3940	struct hfi1_qp_priv *qpriv = qp->priv;3941 3942	lockdep_assert_held(&qp->s_lock);3943	if (!(qpriv->s_flags & HFI1_R_TID_RSC_TIMER)) {3944		qpriv->s_flags |= HFI1_R_TID_RSC_TIMER;3945		qpriv->s_tid_timer.expires = jiffies +3946			qpriv->tid_timer_timeout_jiffies;3947		add_timer(&qpriv->s_tid_timer);3948	}3949}3950 3951static void hfi1_mod_tid_reap_timer(struct rvt_qp *qp)3952{3953	struct hfi1_qp_priv *qpriv = qp->priv;3954 3955	lockdep_assert_held(&qp->s_lock);3956	qpriv->s_flags |= HFI1_R_TID_RSC_TIMER;3957	mod_timer(&qpriv->s_tid_timer, jiffies +3958		  qpriv->tid_timer_timeout_jiffies);3959}3960 3961static int hfi1_stop_tid_reap_timer(struct rvt_qp *qp)3962{3963	struct hfi1_qp_priv *qpriv = qp->priv;3964	int rval = 0;3965 3966	lockdep_assert_held(&qp->s_lock);3967	if (qpriv->s_flags & HFI1_R_TID_RSC_TIMER) {3968		rval = del_timer(&qpriv->s_tid_timer);3969		qpriv->s_flags &= ~HFI1_R_TID_RSC_TIMER;3970	}3971	return rval;3972}3973 3974void hfi1_del_tid_reap_timer(struct rvt_qp *qp)3975{3976	struct hfi1_qp_priv *qpriv = qp->priv;3977 3978	del_timer_sync(&qpriv->s_tid_timer);3979	qpriv->s_flags &= ~HFI1_R_TID_RSC_TIMER;3980}3981 3982static void hfi1_tid_timeout(struct timer_list *t)3983{3984	struct hfi1_qp_priv *qpriv = from_timer(qpriv, t, s_tid_timer);3985	struct rvt_qp *qp = qpriv->owner;3986	struct rvt_dev_info *rdi = ib_to_rvt(qp->ibqp.device);3987	unsigned long flags;3988	u32 i;3989 3990	spin_lock_irqsave(&qp->r_lock, flags);3991	spin_lock(&qp->s_lock);3992	if (qpriv->s_flags & HFI1_R_TID_RSC_TIMER) {3993		dd_dev_warn(dd_from_ibdev(qp->ibqp.device), "[QP%u] %s %d\n",3994			    qp->ibqp.qp_num, __func__, __LINE__);3995		trace_hfi1_msg_tid_timeout(/* msg */3996			qp, "resource timeout = ",3997			(u64)qpriv->tid_timer_timeout_jiffies);3998		hfi1_stop_tid_reap_timer(qp);3999		/*4000		 * Go though the entire ack queue and clear any outstanding4001		 * HW flow and RcvArray resources.4002		 */4003		hfi1_kern_clear_hw_flow(qpriv->rcd, qp);4004		for (i = 0; i < rvt_max_atomic(rdi); i++) {4005			struct tid_rdma_request *req =4006				ack_to_tid_req(&qp->s_ack_queue[i]);4007 4008			hfi1_kern_exp_rcv_clear_all(req);4009		}4010		spin_unlock(&qp->s_lock);4011		if (qp->ibqp.event_handler) {4012			struct ib_event ev;4013 4014			ev.device = qp->ibqp.device;4015			ev.element.qp = &qp->ibqp;4016			ev.event = IB_EVENT_QP_FATAL;4017			qp->ibqp.event_handler(&ev, qp->ibqp.qp_context);4018		}4019		rvt_rc_error(qp, IB_WC_RESP_TIMEOUT_ERR);4020		goto unlock_r_lock;4021	}4022	spin_unlock(&qp->s_lock);4023unlock_r_lock:4024	spin_unlock_irqrestore(&qp->r_lock, flags);4025}4026 4027void hfi1_rc_rcv_tid_rdma_write_resp(struct hfi1_packet *packet)4028{4029	/* HANDLER FOR TID RDMA WRITE RESPONSE packet (Requester side) */4030 4031	/*4032	 * 1. Find matching SWQE4033	 * 2. Check that TIDENTRY array has enough space for a complete4034	 *    segment. If not, put QP in error state.4035	 * 3. Save response data in struct tid_rdma_req and struct tid_rdma_flow4036	 * 4. Remove HFI1_S_WAIT_TID_RESP from s_flags.4037	 * 5. Set qp->s_state4038	 * 6. Kick the send engine (hfi1_schedule_send())4039	 */4040	struct ib_other_headers *ohdr = packet->ohdr;4041	struct rvt_qp *qp = packet->qp;4042	struct hfi1_qp_priv *qpriv = qp->priv;4043	struct hfi1_ctxtdata *rcd = packet->rcd;4044	struct rvt_swqe *wqe;4045	struct tid_rdma_request *req;4046	struct tid_rdma_flow *flow;4047	enum ib_wc_status status;4048	u32 opcode, aeth, psn, flow_psn, i, tidlen = 0, pktlen;4049	bool fecn;4050	unsigned long flags;4051 4052	fecn = process_ecn(qp, packet);4053	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));4054	aeth = be32_to_cpu(ohdr->u.tid_rdma.w_rsp.aeth);4055	opcode = (be32_to_cpu(ohdr->bth[0]) >> 24) & 0xff;4056 4057	spin_lock_irqsave(&qp->s_lock, flags);4058 4059	/* Ignore invalid responses */4060	if (cmp_psn(psn, qp->s_next_psn) >= 0)4061		goto ack_done;4062 4063	/* Ignore duplicate responses. */4064	if (unlikely(cmp_psn(psn, qp->s_last_psn) <= 0))4065		goto ack_done;4066 4067	if (unlikely(qp->s_acked == qp->s_tail))4068		goto ack_done;4069 4070	/*4071	 * If we are waiting for a particular packet sequence number4072	 * due to a request being resent, check for it. Otherwise,4073	 * ensure that we haven't missed anything.4074	 */4075	if (qp->r_flags & RVT_R_RDMAR_SEQ) {4076		if (cmp_psn(psn, qp->s_last_psn + 1) != 0)4077			goto ack_done;4078		qp->r_flags &= ~RVT_R_RDMAR_SEQ;4079	}4080 4081	wqe = rvt_get_swqe_ptr(qp, qpriv->s_tid_cur);4082	if (unlikely(wqe->wr.opcode != IB_WR_TID_RDMA_WRITE))4083		goto ack_op_err;4084 4085	req = wqe_to_tid_req(wqe);4086	/*4087	 * If we've lost ACKs and our acked_tail pointer is too far4088	 * behind, don't overwrite segments. Just drop the packet and4089	 * let the reliability protocol take care of it.4090	 */4091	if (!CIRC_SPACE(req->setup_head, req->acked_tail, MAX_FLOWS))4092		goto ack_done;4093 4094	/*4095	 * The call to do_rc_ack() should be last in the chain of4096	 * packet checks because it will end up updating the QP state.4097	 * Therefore, anything that would prevent the packet from4098	 * being accepted as a successful response should be prior4099	 * to it.4100	 */4101	if (!do_rc_ack(qp, aeth, psn, opcode, 0, rcd))4102		goto ack_done;4103 4104	trace_hfi1_ack(qp, psn);4105 4106	flow = &req->flows[req->setup_head];4107	flow->pkt = 0;4108	flow->tid_idx = 0;4109	flow->tid_offset = 0;4110	flow->sent = 0;4111	flow->resync_npkts = 0;4112	flow->tid_qpn = be32_to_cpu(ohdr->u.tid_rdma.w_rsp.tid_flow_qp);4113	flow->idx = (flow->tid_qpn >> TID_RDMA_DESTQP_FLOW_SHIFT) &4114		TID_RDMA_DESTQP_FLOW_MASK;4115	flow_psn = mask_psn(be32_to_cpu(ohdr->u.tid_rdma.w_rsp.tid_flow_psn));4116	flow->flow_state.generation = flow_psn >> HFI1_KDETH_BTH_SEQ_SHIFT;4117	flow->flow_state.spsn = flow_psn & HFI1_KDETH_BTH_SEQ_MASK;4118	flow->flow_state.resp_ib_psn = psn;4119	flow->length = min_t(u32, req->seg_len,4120			     (wqe->length - (req->comp_seg * req->seg_len)));4121 4122	flow->npkts = rvt_div_round_up_mtu(qp, flow->length);4123	flow->flow_state.lpsn = flow->flow_state.spsn +4124		flow->npkts - 1;4125	/* payload length = packet length - (header length + ICRC length) */4126	pktlen = packet->tlen - (packet->hlen + 4);4127	if (pktlen > sizeof(flow->tid_entry)) {4128		status = IB_WC_LOC_LEN_ERR;4129		goto ack_err;4130	}4131	memcpy(flow->tid_entry, packet->ebuf, pktlen);4132	flow->tidcnt = pktlen / sizeof(*flow->tid_entry);4133	trace_hfi1_tid_flow_rcv_write_resp(qp, req->setup_head, flow);4134 4135	req->comp_seg++;4136	trace_hfi1_tid_write_sender_rcv_resp(qp, 0);4137	/*4138	 * Walk the TID_ENTRY list to make sure we have enough space for a4139	 * complete segment.4140	 */4141	for (i = 0; i < flow->tidcnt; i++) {4142		trace_hfi1_tid_entry_rcv_write_resp(/* entry */4143			qp, i, flow->tid_entry[i]);4144		if (!EXP_TID_GET(flow->tid_entry[i], LEN)) {4145			status = IB_WC_LOC_LEN_ERR;4146			goto ack_err;4147		}4148		tidlen += EXP_TID_GET(flow->tid_entry[i], LEN);4149	}4150	if (tidlen * PAGE_SIZE < flow->length) {4151		status = IB_WC_LOC_LEN_ERR;4152		goto ack_err;4153	}4154 4155	trace_hfi1_tid_req_rcv_write_resp(qp, 0, wqe->wr.opcode, wqe->psn,4156					  wqe->lpsn, req);4157	/*4158	 * If this is the first response for this request, set the initial4159	 * flow index to the current flow.4160	 */4161	if (!cmp_psn(psn, wqe->psn)) {4162		req->r_last_acked = mask_psn(wqe->psn - 1);4163		/* Set acked flow index to head index */4164		req->acked_tail = req->setup_head;4165	}4166 4167	/* advance circular buffer head */4168	req->setup_head = CIRC_NEXT(req->setup_head, MAX_FLOWS);4169	req->state = TID_REQUEST_ACTIVE;4170 4171	/*4172	 * If all responses for this TID RDMA WRITE request have been received4173	 * advance the pointer to the next one.4174	 * Since TID RDMA requests could be mixed in with regular IB requests,4175	 * they might not appear sequentially in the queue. Therefore, the4176	 * next request needs to be "found".4177	 */4178	if (qpriv->s_tid_cur != qpriv->s_tid_head &&4179	    req->comp_seg == req->total_segs) {4180		for (i = qpriv->s_tid_cur + 1; ; i++) {4181			if (i == qp->s_size)4182				i = 0;4183			wqe = rvt_get_swqe_ptr(qp, i);4184			if (i == qpriv->s_tid_head)4185				break;4186			if (wqe->wr.opcode == IB_WR_TID_RDMA_WRITE)4187				break;4188		}4189		qpriv->s_tid_cur = i;4190	}4191	qp->s_flags &= ~HFI1_S_WAIT_TID_RESP;4192	hfi1_schedule_tid_send(qp);4193	goto ack_done;4194 4195ack_op_err:4196	status = IB_WC_LOC_QP_OP_ERR;4197ack_err:4198	rvt_error_qp(qp, status);4199ack_done:4200	if (fecn)4201		qp->s_flags |= RVT_S_ECN;4202	spin_unlock_irqrestore(&qp->s_lock, flags);4203}4204 4205bool hfi1_build_tid_rdma_packet(struct rvt_swqe *wqe,4206				struct ib_other_headers *ohdr,4207				u32 *bth1, u32 *bth2, u32 *len)4208{4209	struct tid_rdma_request *req = wqe_to_tid_req(wqe);4210	struct tid_rdma_flow *flow = &req->flows[req->clear_tail];4211	struct tid_rdma_params *remote;4212	struct rvt_qp *qp = req->qp;4213	struct hfi1_qp_priv *qpriv = qp->priv;4214	u32 tidentry = flow->tid_entry[flow->tid_idx];4215	u32 tidlen = EXP_TID_GET(tidentry, LEN) << PAGE_SHIFT;4216	struct tid_rdma_write_data *wd = &ohdr->u.tid_rdma.w_data;4217	u32 next_offset, om = KDETH_OM_LARGE;4218	bool last_pkt;4219 4220	if (!tidlen) {4221		hfi1_trdma_send_complete(qp, wqe, IB_WC_REM_INV_RD_REQ_ERR);4222		rvt_error_qp(qp, IB_WC_REM_INV_RD_REQ_ERR);4223	}4224 4225	*len = min_t(u32, qp->pmtu, tidlen - flow->tid_offset);4226	flow->sent += *len;4227	next_offset = flow->tid_offset + *len;4228	last_pkt = (flow->tid_idx == (flow->tidcnt - 1) &&4229		    next_offset >= tidlen) || (flow->sent >= flow->length);4230	trace_hfi1_tid_entry_build_write_data(qp, flow->tid_idx, tidentry);4231	trace_hfi1_tid_flow_build_write_data(qp, req->clear_tail, flow);4232 4233	rcu_read_lock();4234	remote = rcu_dereference(qpriv->tid_rdma.remote);4235	KDETH_RESET(wd->kdeth0, KVER, 0x1);4236	KDETH_SET(wd->kdeth0, SH, !last_pkt);4237	KDETH_SET(wd->kdeth0, INTR, !!(!last_pkt && remote->urg));4238	KDETH_SET(wd->kdeth0, TIDCTRL, EXP_TID_GET(tidentry, CTRL));4239	KDETH_SET(wd->kdeth0, TID, EXP_TID_GET(tidentry, IDX));4240	KDETH_SET(wd->kdeth0, OM, om == KDETH_OM_LARGE);4241	KDETH_SET(wd->kdeth0, OFFSET, flow->tid_offset / om);4242	KDETH_RESET(wd->kdeth1, JKEY, remote->jkey);4243	wd->verbs_qp = cpu_to_be32(qp->remote_qpn);4244	rcu_read_unlock();4245 4246	*bth1 = flow->tid_qpn;4247	*bth2 = mask_psn(((flow->flow_state.spsn + flow->pkt++) &4248			 HFI1_KDETH_BTH_SEQ_MASK) |4249			 (flow->flow_state.generation <<4250			  HFI1_KDETH_BTH_SEQ_SHIFT));4251	if (last_pkt) {4252		/* PSNs are zero-based, so +1 to count number of packets */4253		if (flow->flow_state.lpsn + 1 +4254		    rvt_div_round_up_mtu(qp, req->seg_len) >4255		    MAX_TID_FLOW_PSN)4256			req->state = TID_REQUEST_SYNC;4257		*bth2 |= IB_BTH_REQ_ACK;4258	}4259 4260	if (next_offset >= tidlen) {4261		flow->tid_offset = 0;4262		flow->tid_idx++;4263	} else {4264		flow->tid_offset = next_offset;4265	}4266	return last_pkt;4267}4268 4269void hfi1_rc_rcv_tid_rdma_write_data(struct hfi1_packet *packet)4270{4271	struct rvt_qp *qp = packet->qp;4272	struct hfi1_qp_priv *priv = qp->priv;4273	struct hfi1_ctxtdata *rcd = priv->rcd;4274	struct ib_other_headers *ohdr = packet->ohdr;4275	struct rvt_ack_entry *e;4276	struct tid_rdma_request *req;4277	struct tid_rdma_flow *flow;4278	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);4279	unsigned long flags;4280	u32 psn, next;4281	u8 opcode;4282	bool fecn;4283 4284	fecn = process_ecn(qp, packet);4285	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));4286	opcode = (be32_to_cpu(ohdr->bth[0]) >> 24) & 0xff;4287 4288	/*4289	 * All error handling should be done by now. If we are here, the packet4290	 * is either good or been accepted by the error handler.4291	 */4292	spin_lock_irqsave(&qp->s_lock, flags);4293	e = &qp->s_ack_queue[priv->r_tid_tail];4294	req = ack_to_tid_req(e);4295	flow = &req->flows[req->clear_tail];4296	if (cmp_psn(psn, full_flow_psn(flow, flow->flow_state.lpsn))) {4297		update_r_next_psn_fecn(packet, priv, rcd, flow, fecn);4298 4299		if (cmp_psn(psn, flow->flow_state.r_next_psn))4300			goto send_nak;4301 4302		flow->flow_state.r_next_psn = mask_psn(psn + 1);4303		/*4304		 * Copy the payload to destination buffer if this packet is4305		 * delivered as an eager packet due to RSM rule and FECN.4306		 * The RSM rule selects FECN bit in BTH and SH bit in4307		 * KDETH header and therefore will not match the last4308		 * packet of each segment that has SH bit cleared.4309		 */4310		if (fecn && packet->etype == RHF_RCV_TYPE_EAGER) {4311			struct rvt_sge_state ss;4312			u32 len;4313			u32 tlen = packet->tlen;4314			u16 hdrsize = packet->hlen;4315			u8 pad = packet->pad;4316			u8 extra_bytes = pad + packet->extra_byte +4317				(SIZE_OF_CRC << 2);4318			u32 pmtu = qp->pmtu;4319 4320			if (unlikely(tlen != (hdrsize + pmtu + extra_bytes)))4321				goto send_nak;4322			len = req->comp_seg * req->seg_len;4323			len += delta_psn(psn,4324				full_flow_psn(flow, flow->flow_state.spsn)) *4325				pmtu;4326			if (unlikely(req->total_len - len < pmtu))4327				goto send_nak;4328 4329			/*4330			 * The e->rdma_sge field is set when TID RDMA WRITE REQ4331			 * is first received and is never modified thereafter.4332			 */4333			ss.sge = e->rdma_sge;4334			ss.sg_list = NULL;4335			ss.num_sge = 1;4336			ss.total_len = req->total_len;4337			rvt_skip_sge(&ss, len, false);4338			rvt_copy_sge(qp, &ss, packet->payload, pmtu, false,4339				     false);4340			/* Raise the sw sequence check flag for next packet */4341			priv->r_next_psn_kdeth = mask_psn(psn + 1);4342			priv->s_flags |= HFI1_R_TID_SW_PSN;4343		}4344		goto exit;4345	}4346	flow->flow_state.r_next_psn = mask_psn(psn + 1);4347	hfi1_kern_exp_rcv_clear(req);4348	priv->alloc_w_segs--;4349	rcd->flows[flow->idx].psn = psn & HFI1_KDETH_BTH_SEQ_MASK;4350	req->comp_seg++;4351	priv->s_nak_state = 0;4352 4353	/*4354	 * Release the flow if one of the following conditions has been met:4355	 *  - The request has reached a sync point AND all outstanding4356	 *    segments have been completed, or4357	 *  - The entire request is complete and there are no more requests4358	 *    (of any kind) in the queue.4359	 */4360	trace_hfi1_rsp_rcv_tid_write_data(qp, psn);4361	trace_hfi1_tid_req_rcv_write_data(qp, 0, e->opcode, e->psn, e->lpsn,4362					  req);4363	trace_hfi1_tid_write_rsp_rcv_data(qp);4364	validate_r_tid_ack(priv);4365 4366	if (opcode == TID_OP(WRITE_DATA_LAST)) {4367		release_rdma_sge_mr(e);4368		for (next = priv->r_tid_tail + 1; ; next++) {4369			if (next > rvt_size_atomic(&dev->rdi))4370				next = 0;4371			if (next == priv->r_tid_head)4372				break;4373			e = &qp->s_ack_queue[next];4374			if (e->opcode == TID_OP(WRITE_REQ))4375				break;4376		}4377		priv->r_tid_tail = next;4378		if (++qp->s_acked_ack_queue > rvt_size_atomic(&dev->rdi))4379			qp->s_acked_ack_queue = 0;4380	}4381 4382	hfi1_tid_write_alloc_resources(qp, true);4383 4384	/*4385	 * If we need to generate more responses, schedule the4386	 * send engine.4387	 */4388	if (req->cur_seg < req->total_segs ||4389	    qp->s_tail_ack_queue != qp->r_head_ack_queue) {4390		qp->s_flags |= RVT_S_RESP_PENDING;4391		hfi1_schedule_send(qp);4392	}4393 4394	priv->pending_tid_w_segs--;4395	if (priv->s_flags & HFI1_R_TID_RSC_TIMER) {4396		if (priv->pending_tid_w_segs)4397			hfi1_mod_tid_reap_timer(req->qp);4398		else4399			hfi1_stop_tid_reap_timer(req->qp);4400	}4401 4402done:4403	tid_rdma_schedule_ack(qp);4404exit:4405	priv->r_next_psn_kdeth = flow->flow_state.r_next_psn;4406	if (fecn)4407		qp->s_flags |= RVT_S_ECN;4408	spin_unlock_irqrestore(&qp->s_lock, flags);4409	return;4410 4411send_nak:4412	if (!priv->s_nak_state) {4413		priv->s_nak_state = IB_NAK_PSN_ERROR;4414		priv->s_nak_psn = flow->flow_state.r_next_psn;4415		tid_rdma_trigger_ack(qp);4416	}4417	goto done;4418}4419 4420static bool hfi1_tid_rdma_is_resync_psn(u32 psn)4421{4422	return (bool)((psn & HFI1_KDETH_BTH_SEQ_MASK) ==4423		      HFI1_KDETH_BTH_SEQ_MASK);4424}4425 4426u32 hfi1_build_tid_rdma_write_ack(struct rvt_qp *qp, struct rvt_ack_entry *e,4427				  struct ib_other_headers *ohdr, u16 iflow,4428				  u32 *bth1, u32 *bth2)4429{4430	struct hfi1_qp_priv *qpriv = qp->priv;4431	struct tid_flow_state *fs = &qpriv->flow_state;4432	struct tid_rdma_request *req = ack_to_tid_req(e);4433	struct tid_rdma_flow *flow = &req->flows[iflow];4434	struct tid_rdma_params *remote;4435 4436	rcu_read_lock();4437	remote = rcu_dereference(qpriv->tid_rdma.remote);4438	KDETH_RESET(ohdr->u.tid_rdma.ack.kdeth1, JKEY, remote->jkey);4439	ohdr->u.tid_rdma.ack.verbs_qp = cpu_to_be32(qp->remote_qpn);4440	*bth1 = remote->qp;4441	rcu_read_unlock();4442 4443	if (qpriv->resync) {4444		*bth2 = mask_psn((fs->generation <<4445				  HFI1_KDETH_BTH_SEQ_SHIFT) - 1);4446		ohdr->u.tid_rdma.ack.aeth = rvt_compute_aeth(qp);4447	} else if (qpriv->s_nak_state) {4448		*bth2 = mask_psn(qpriv->s_nak_psn);4449		ohdr->u.tid_rdma.ack.aeth =4450			cpu_to_be32((qp->r_msn & IB_MSN_MASK) |4451				    (qpriv->s_nak_state <<4452				     IB_AETH_CREDIT_SHIFT));4453	} else {4454		*bth2 = full_flow_psn(flow, flow->flow_state.lpsn);4455		ohdr->u.tid_rdma.ack.aeth = rvt_compute_aeth(qp);4456	}4457	KDETH_RESET(ohdr->u.tid_rdma.ack.kdeth0, KVER, 0x1);4458	ohdr->u.tid_rdma.ack.tid_flow_qp =4459		cpu_to_be32(qpriv->tid_rdma.local.qp |4460			    ((flow->idx & TID_RDMA_DESTQP_FLOW_MASK) <<4461			     TID_RDMA_DESTQP_FLOW_SHIFT) |4462			    qpriv->rcd->ctxt);4463 4464	ohdr->u.tid_rdma.ack.tid_flow_psn = 0;4465	ohdr->u.tid_rdma.ack.verbs_psn =4466		cpu_to_be32(flow->flow_state.resp_ib_psn);4467 4468	if (qpriv->resync) {4469		/*4470		 * If the PSN before the current expect KDETH PSN is the4471		 * RESYNC PSN, then we never received a good TID RDMA WRITE4472		 * DATA packet after a previous RESYNC.4473		 * In this case, the next expected KDETH PSN stays the same.4474		 */4475		if (hfi1_tid_rdma_is_resync_psn(qpriv->r_next_psn_kdeth - 1)) {4476			ohdr->u.tid_rdma.ack.tid_flow_psn =4477				cpu_to_be32(qpriv->r_next_psn_kdeth_save);4478		} else {4479			/*4480			 * Because the KDETH PSNs jump during a RESYNC, it's4481			 * not possible to infer (or compute) the previous value4482			 * of r_next_psn_kdeth in the case of back-to-back4483			 * RESYNC packets. Therefore, we save it.4484			 */4485			qpriv->r_next_psn_kdeth_save =4486				qpriv->r_next_psn_kdeth - 1;4487			ohdr->u.tid_rdma.ack.tid_flow_psn =4488				cpu_to_be32(qpriv->r_next_psn_kdeth_save);4489			qpriv->r_next_psn_kdeth = mask_psn(*bth2 + 1);4490		}4491		qpriv->resync = false;4492	}4493 4494	return sizeof(ohdr->u.tid_rdma.ack) / sizeof(u32);4495}4496 4497void hfi1_rc_rcv_tid_rdma_ack(struct hfi1_packet *packet)4498{4499	struct ib_other_headers *ohdr = packet->ohdr;4500	struct rvt_qp *qp = packet->qp;4501	struct hfi1_qp_priv *qpriv = qp->priv;4502	struct rvt_swqe *wqe;4503	struct tid_rdma_request *req;4504	struct tid_rdma_flow *flow;4505	u32 aeth, psn, req_psn, ack_psn, flpsn, resync_psn, ack_kpsn;4506	unsigned long flags;4507	u16 fidx;4508 4509	trace_hfi1_tid_write_sender_rcv_tid_ack(qp, 0);4510	process_ecn(qp, packet);4511	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));4512	aeth = be32_to_cpu(ohdr->u.tid_rdma.ack.aeth);4513	req_psn = mask_psn(be32_to_cpu(ohdr->u.tid_rdma.ack.verbs_psn));4514	resync_psn = mask_psn(be32_to_cpu(ohdr->u.tid_rdma.ack.tid_flow_psn));4515 4516	spin_lock_irqsave(&qp->s_lock, flags);4517	trace_hfi1_rcv_tid_ack(qp, aeth, psn, req_psn, resync_psn);4518 4519	/* If we are waiting for an ACK to RESYNC, drop any other packets */4520	if ((qp->s_flags & HFI1_S_WAIT_HALT) &&4521	    cmp_psn(psn, qpriv->s_resync_psn))4522		goto ack_op_err;4523 4524	ack_psn = req_psn;4525	if (hfi1_tid_rdma_is_resync_psn(psn))4526		ack_kpsn = resync_psn;4527	else4528		ack_kpsn = psn;4529	if (aeth >> 29) {4530		ack_psn--;4531		ack_kpsn--;4532	}4533 4534	if (unlikely(qp->s_acked == qp->s_tail))4535		goto ack_op_err;4536 4537	wqe = rvt_get_swqe_ptr(qp, qp->s_acked);4538 4539	if (wqe->wr.opcode != IB_WR_TID_RDMA_WRITE)4540		goto ack_op_err;4541 4542	req = wqe_to_tid_req(wqe);4543	trace_hfi1_tid_req_rcv_tid_ack(qp, 0, wqe->wr.opcode, wqe->psn,4544				       wqe->lpsn, req);4545	flow = &req->flows[req->acked_tail];4546	trace_hfi1_tid_flow_rcv_tid_ack(qp, req->acked_tail, flow);4547 4548	/* Drop stale ACK/NAK */4549	if (cmp_psn(psn, full_flow_psn(flow, flow->flow_state.spsn)) < 0 ||4550	    cmp_psn(req_psn, flow->flow_state.resp_ib_psn) < 0)4551		goto ack_op_err;4552 4553	while (cmp_psn(ack_kpsn,4554		       full_flow_psn(flow, flow->flow_state.lpsn)) >= 0 &&4555	       req->ack_seg < req->cur_seg) {4556		req->ack_seg++;4557		/* advance acked segment pointer */4558		req->acked_tail = CIRC_NEXT(req->acked_tail, MAX_FLOWS);4559		req->r_last_acked = flow->flow_state.resp_ib_psn;4560		trace_hfi1_tid_req_rcv_tid_ack(qp, 0, wqe->wr.opcode, wqe->psn,4561					       wqe->lpsn, req);4562		if (req->ack_seg == req->total_segs) {4563			req->state = TID_REQUEST_COMPLETE;4564			wqe = do_rc_completion(qp, wqe,4565					       to_iport(qp->ibqp.device,4566							qp->port_num));4567			trace_hfi1_sender_rcv_tid_ack(qp);4568			atomic_dec(&qpriv->n_tid_requests);4569			if (qp->s_acked == qp->s_tail)4570				break;4571			if (wqe->wr.opcode != IB_WR_TID_RDMA_WRITE)4572				break;4573			req = wqe_to_tid_req(wqe);4574		}4575		flow = &req->flows[req->acked_tail];4576		trace_hfi1_tid_flow_rcv_tid_ack(qp, req->acked_tail, flow);4577	}4578 4579	trace_hfi1_tid_req_rcv_tid_ack(qp, 0, wqe->wr.opcode, wqe->psn,4580				       wqe->lpsn, req);4581	switch (aeth >> 29) {4582	case 0:         /* ACK */4583		if (qpriv->s_flags & RVT_S_WAIT_ACK)4584			qpriv->s_flags &= ~RVT_S_WAIT_ACK;4585		if (!hfi1_tid_rdma_is_resync_psn(psn)) {4586			/* Check if there is any pending TID ACK */4587			if (wqe->wr.opcode == IB_WR_TID_RDMA_WRITE &&4588			    req->ack_seg < req->cur_seg)4589				hfi1_mod_tid_retry_timer(qp);4590			else4591				hfi1_stop_tid_retry_timer(qp);4592			hfi1_schedule_send(qp);4593		} else {4594			u32 spsn, fpsn, last_acked, generation;4595			struct tid_rdma_request *rptr;4596 4597			/* ACK(RESYNC) */4598			hfi1_stop_tid_retry_timer(qp);4599			/* Allow new requests (see hfi1_make_tid_rdma_pkt) */4600			qp->s_flags &= ~HFI1_S_WAIT_HALT;4601			/*4602			 * Clear RVT_S_SEND_ONE flag in case that the TID RDMA4603			 * ACK is received after the TID retry timer is fired4604			 * again. In this case, do not send any more TID4605			 * RESYNC request or wait for any more TID ACK packet.4606			 */4607			qpriv->s_flags &= ~RVT_S_SEND_ONE;4608			hfi1_schedule_send(qp);4609 4610			if ((qp->s_acked == qpriv->s_tid_tail &&4611			     req->ack_seg == req->total_segs) ||4612			    qp->s_acked == qp->s_tail) {4613				qpriv->s_state = TID_OP(WRITE_DATA_LAST);4614				goto done;4615			}4616 4617			if (req->ack_seg == req->comp_seg) {4618				qpriv->s_state = TID_OP(WRITE_DATA);4619				goto done;4620			}4621 4622			/*4623			 * The PSN to start with is the next PSN after the4624			 * RESYNC PSN.4625			 */4626			psn = mask_psn(psn + 1);4627			generation = psn >> HFI1_KDETH_BTH_SEQ_SHIFT;4628			spsn = 0;4629 4630			/*4631			 * Update to the correct WQE when we get an ACK(RESYNC)4632			 * in the middle of a request.4633			 */4634			if (delta_psn(ack_psn, wqe->lpsn))4635				wqe = rvt_get_swqe_ptr(qp, qp->s_acked);4636			req = wqe_to_tid_req(wqe);4637			flow = &req->flows[req->acked_tail];4638			/*4639			 * RESYNC re-numbers the PSN ranges of all remaining4640			 * segments. Also, PSN's start from 0 in the middle of a4641			 * segment and the first segment size is less than the4642			 * default number of packets. flow->resync_npkts is used4643			 * to track the number of packets from the start of the4644			 * real segment to the point of 0 PSN after the RESYNC4645			 * in order to later correctly rewind the SGE.4646			 */4647			fpsn = full_flow_psn(flow, flow->flow_state.spsn);4648			req->r_ack_psn = psn;4649			/*4650			 * If resync_psn points to the last flow PSN for a4651			 * segment and the new segment (likely from a new4652			 * request) starts with a new generation number, we4653			 * need to adjust resync_psn accordingly.4654			 */4655			if (flow->flow_state.generation !=4656			    (resync_psn >> HFI1_KDETH_BTH_SEQ_SHIFT))4657				resync_psn = mask_psn(fpsn - 1);4658			flow->resync_npkts +=4659				delta_psn(mask_psn(resync_psn + 1), fpsn);4660			/*4661			 * Renumber all packet sequence number ranges4662			 * based on the new generation.4663			 */4664			last_acked = qp->s_acked;4665			rptr = req;4666			while (1) {4667				/* start from last acked segment */4668				for (fidx = rptr->acked_tail;4669				     CIRC_CNT(rptr->setup_head, fidx,4670					      MAX_FLOWS);4671				     fidx = CIRC_NEXT(fidx, MAX_FLOWS)) {4672					u32 lpsn;4673					u32 gen;4674 4675					flow = &rptr->flows[fidx];4676					gen = flow->flow_state.generation;4677					if (WARN_ON(gen == generation &&4678						    flow->flow_state.spsn !=4679						     spsn))4680						continue;4681					lpsn = flow->flow_state.lpsn;4682					lpsn = full_flow_psn(flow, lpsn);4683					flow->npkts =4684						delta_psn(lpsn,4685							  mask_psn(resync_psn)4686							  );4687					flow->flow_state.generation =4688						generation;4689					flow->flow_state.spsn = spsn;4690					flow->flow_state.lpsn =4691						flow->flow_state.spsn +4692						flow->npkts - 1;4693					flow->pkt = 0;4694					spsn += flow->npkts;4695					resync_psn += flow->npkts;4696					trace_hfi1_tid_flow_rcv_tid_ack(qp,4697									fidx,4698									flow);4699				}4700				if (++last_acked == qpriv->s_tid_cur + 1)4701					break;4702				if (last_acked == qp->s_size)4703					last_acked = 0;4704				wqe = rvt_get_swqe_ptr(qp, last_acked);4705				rptr = wqe_to_tid_req(wqe);4706			}4707			req->cur_seg = req->ack_seg;4708			qpriv->s_tid_tail = qp->s_acked;4709			qpriv->s_state = TID_OP(WRITE_REQ);4710			hfi1_schedule_tid_send(qp);4711		}4712done:4713		qpriv->s_retry = qp->s_retry_cnt;4714		break;4715 4716	case 3:         /* NAK */4717		hfi1_stop_tid_retry_timer(qp);4718		switch ((aeth >> IB_AETH_CREDIT_SHIFT) &4719			IB_AETH_CREDIT_MASK) {4720		case 0: /* PSN sequence error */4721			if (!req->flows)4722				break;4723			flow = &req->flows[req->acked_tail];4724			flpsn = full_flow_psn(flow, flow->flow_state.lpsn);4725			if (cmp_psn(psn, flpsn) > 0)4726				break;4727			trace_hfi1_tid_flow_rcv_tid_ack(qp, req->acked_tail,4728							flow);4729			req->r_ack_psn = mask_psn(be32_to_cpu(ohdr->bth[2]));4730			req->cur_seg = req->ack_seg;4731			qpriv->s_tid_tail = qp->s_acked;4732			qpriv->s_state = TID_OP(WRITE_REQ);4733			qpriv->s_retry = qp->s_retry_cnt;4734			hfi1_schedule_tid_send(qp);4735			break;4736 4737		default:4738			break;4739		}4740		break;4741 4742	default:4743		break;4744	}4745 4746ack_op_err:4747	spin_unlock_irqrestore(&qp->s_lock, flags);4748}4749 4750void hfi1_add_tid_retry_timer(struct rvt_qp *qp)4751{4752	struct hfi1_qp_priv *priv = qp->priv;4753	struct ib_qp *ibqp = &qp->ibqp;4754	struct rvt_dev_info *rdi = ib_to_rvt(ibqp->device);4755 4756	lockdep_assert_held(&qp->s_lock);4757	if (!(priv->s_flags & HFI1_S_TID_RETRY_TIMER)) {4758		priv->s_flags |= HFI1_S_TID_RETRY_TIMER;4759		priv->s_tid_retry_timer.expires = jiffies +4760			priv->tid_retry_timeout_jiffies + rdi->busy_jiffies;4761		add_timer(&priv->s_tid_retry_timer);4762	}4763}4764 4765static void hfi1_mod_tid_retry_timer(struct rvt_qp *qp)4766{4767	struct hfi1_qp_priv *priv = qp->priv;4768	struct ib_qp *ibqp = &qp->ibqp;4769	struct rvt_dev_info *rdi = ib_to_rvt(ibqp->device);4770 4771	lockdep_assert_held(&qp->s_lock);4772	priv->s_flags |= HFI1_S_TID_RETRY_TIMER;4773	mod_timer(&priv->s_tid_retry_timer, jiffies +4774		  priv->tid_retry_timeout_jiffies + rdi->busy_jiffies);4775}4776 4777static int hfi1_stop_tid_retry_timer(struct rvt_qp *qp)4778{4779	struct hfi1_qp_priv *priv = qp->priv;4780	int rval = 0;4781 4782	lockdep_assert_held(&qp->s_lock);4783	if (priv->s_flags & HFI1_S_TID_RETRY_TIMER) {4784		rval = del_timer(&priv->s_tid_retry_timer);4785		priv->s_flags &= ~HFI1_S_TID_RETRY_TIMER;4786	}4787	return rval;4788}4789 4790void hfi1_del_tid_retry_timer(struct rvt_qp *qp)4791{4792	struct hfi1_qp_priv *priv = qp->priv;4793 4794	del_timer_sync(&priv->s_tid_retry_timer);4795	priv->s_flags &= ~HFI1_S_TID_RETRY_TIMER;4796}4797 4798static void hfi1_tid_retry_timeout(struct timer_list *t)4799{4800	struct hfi1_qp_priv *priv = from_timer(priv, t, s_tid_retry_timer);4801	struct rvt_qp *qp = priv->owner;4802	struct rvt_swqe *wqe;4803	unsigned long flags;4804	struct tid_rdma_request *req;4805 4806	spin_lock_irqsave(&qp->r_lock, flags);4807	spin_lock(&qp->s_lock);4808	trace_hfi1_tid_write_sender_retry_timeout(qp, 0);4809	if (priv->s_flags & HFI1_S_TID_RETRY_TIMER) {4810		hfi1_stop_tid_retry_timer(qp);4811		if (!priv->s_retry) {4812			trace_hfi1_msg_tid_retry_timeout(/* msg */4813				qp,4814				"Exhausted retries. Tid retry timeout = ",4815				(u64)priv->tid_retry_timeout_jiffies);4816 4817			wqe = rvt_get_swqe_ptr(qp, qp->s_acked);4818			hfi1_trdma_send_complete(qp, wqe, IB_WC_RETRY_EXC_ERR);4819			rvt_error_qp(qp, IB_WC_WR_FLUSH_ERR);4820		} else {4821			wqe = rvt_get_swqe_ptr(qp, qp->s_acked);4822			req = wqe_to_tid_req(wqe);4823			trace_hfi1_tid_req_tid_retry_timeout(/* req */4824			   qp, 0, wqe->wr.opcode, wqe->psn, wqe->lpsn, req);4825 4826			priv->s_flags &= ~RVT_S_WAIT_ACK;4827			/* Only send one packet (the RESYNC) */4828			priv->s_flags |= RVT_S_SEND_ONE;4829			/*4830			 * No additional request shall be made by this QP until4831			 * the RESYNC has been complete.4832			 */4833			qp->s_flags |= HFI1_S_WAIT_HALT;4834			priv->s_state = TID_OP(RESYNC);4835			priv->s_retry--;4836			hfi1_schedule_tid_send(qp);4837		}4838	}4839	spin_unlock(&qp->s_lock);4840	spin_unlock_irqrestore(&qp->r_lock, flags);4841}4842 4843u32 hfi1_build_tid_rdma_resync(struct rvt_qp *qp, struct rvt_swqe *wqe,4844			       struct ib_other_headers *ohdr, u32 *bth1,4845			       u32 *bth2, u16 fidx)4846{4847	struct hfi1_qp_priv *qpriv = qp->priv;4848	struct tid_rdma_params *remote;4849	struct tid_rdma_request *req = wqe_to_tid_req(wqe);4850	struct tid_rdma_flow *flow = &req->flows[fidx];4851	u32 generation;4852 4853	rcu_read_lock();4854	remote = rcu_dereference(qpriv->tid_rdma.remote);4855	KDETH_RESET(ohdr->u.tid_rdma.ack.kdeth1, JKEY, remote->jkey);4856	ohdr->u.tid_rdma.ack.verbs_qp = cpu_to_be32(qp->remote_qpn);4857	*bth1 = remote->qp;4858	rcu_read_unlock();4859 4860	generation = kern_flow_generation_next(flow->flow_state.generation);4861	*bth2 = mask_psn((generation << HFI1_KDETH_BTH_SEQ_SHIFT) - 1);4862	qpriv->s_resync_psn = *bth2;4863	*bth2 |= IB_BTH_REQ_ACK;4864	KDETH_RESET(ohdr->u.tid_rdma.ack.kdeth0, KVER, 0x1);4865 4866	return sizeof(ohdr->u.tid_rdma.resync) / sizeof(u32);4867}4868 4869void hfi1_rc_rcv_tid_rdma_resync(struct hfi1_packet *packet)4870{4871	struct ib_other_headers *ohdr = packet->ohdr;4872	struct rvt_qp *qp = packet->qp;4873	struct hfi1_qp_priv *qpriv = qp->priv;4874	struct hfi1_ctxtdata *rcd = qpriv->rcd;4875	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);4876	struct rvt_ack_entry *e;4877	struct tid_rdma_request *req;4878	struct tid_rdma_flow *flow;4879	struct tid_flow_state *fs = &qpriv->flow_state;4880	u32 psn, generation, idx, gen_next;4881	bool fecn;4882	unsigned long flags;4883 4884	fecn = process_ecn(qp, packet);4885	psn = mask_psn(be32_to_cpu(ohdr->bth[2]));4886 4887	generation = mask_psn(psn + 1) >> HFI1_KDETH_BTH_SEQ_SHIFT;4888	spin_lock_irqsave(&qp->s_lock, flags);4889 4890	gen_next = (fs->generation == KERN_GENERATION_RESERVED) ?4891		generation : kern_flow_generation_next(fs->generation);4892	/*4893	 * RESYNC packet contains the "next" generation and can only be4894	 * from the current or previous generations4895	 */4896	if (generation != mask_generation(gen_next - 1) &&4897	    generation != gen_next)4898		goto bail;4899	/* Already processing a resync */4900	if (qpriv->resync)4901		goto bail;4902 4903	spin_lock(&rcd->exp_lock);4904	if (fs->index >= RXE_NUM_TID_FLOWS) {4905		/*4906		 * If we don't have a flow, save the generation so it can be4907		 * applied when a new flow is allocated4908		 */4909		fs->generation = generation;4910	} else {4911		/* Reprogram the QP flow with new generation */4912		rcd->flows[fs->index].generation = generation;4913		fs->generation = kern_setup_hw_flow(rcd, fs->index);4914	}4915	fs->psn = 0;4916	/*4917	 * Disable SW PSN checking since a RESYNC is equivalent to a4918	 * sync point and the flow has/will be reprogrammed4919	 */4920	qpriv->s_flags &= ~HFI1_R_TID_SW_PSN;4921	trace_hfi1_tid_write_rsp_rcv_resync(qp);4922 4923	/*4924	 * Reset all TID flow information with the new generation.4925	 * This is done for all requests and segments after the4926	 * last received segment4927	 */4928	for (idx = qpriv->r_tid_tail; ; idx++) {4929		u16 flow_idx;4930 4931		if (idx > rvt_size_atomic(&dev->rdi))4932			idx = 0;4933		e = &qp->s_ack_queue[idx];4934		if (e->opcode == TID_OP(WRITE_REQ)) {4935			req = ack_to_tid_req(e);4936			trace_hfi1_tid_req_rcv_resync(qp, 0, e->opcode, e->psn,4937						      e->lpsn, req);4938 4939			/* start from last unacked segment */4940			for (flow_idx = req->clear_tail;4941			     CIRC_CNT(req->setup_head, flow_idx,4942				      MAX_FLOWS);4943			     flow_idx = CIRC_NEXT(flow_idx, MAX_FLOWS)) {4944				u32 lpsn;4945				u32 next;4946 4947				flow = &req->flows[flow_idx];4948				lpsn = full_flow_psn(flow,4949						     flow->flow_state.lpsn);4950				next = flow->flow_state.r_next_psn;4951				flow->npkts = delta_psn(lpsn, next - 1);4952				flow->flow_state.generation = fs->generation;4953				flow->flow_state.spsn = fs->psn;4954				flow->flow_state.lpsn =4955					flow->flow_state.spsn + flow->npkts - 1;4956				flow->flow_state.r_next_psn =4957					full_flow_psn(flow,4958						      flow->flow_state.spsn);4959				fs->psn += flow->npkts;4960				trace_hfi1_tid_flow_rcv_resync(qp, flow_idx,4961							       flow);4962			}4963		}4964		if (idx == qp->s_tail_ack_queue)4965			break;4966	}4967 4968	spin_unlock(&rcd->exp_lock);4969	qpriv->resync = true;4970	/* RESYNC request always gets a TID RDMA ACK. */4971	qpriv->s_nak_state = 0;4972	tid_rdma_trigger_ack(qp);4973bail:4974	if (fecn)4975		qp->s_flags |= RVT_S_ECN;4976	spin_unlock_irqrestore(&qp->s_lock, flags);4977}4978 4979/*4980 * Call this function when the last TID RDMA WRITE DATA packet for a request4981 * is built.4982 */4983static void update_tid_tail(struct rvt_qp *qp)4984	__must_hold(&qp->s_lock)4985{4986	struct hfi1_qp_priv *priv = qp->priv;4987	u32 i;4988	struct rvt_swqe *wqe;4989 4990	lockdep_assert_held(&qp->s_lock);4991	/* Can't move beyond s_tid_cur */4992	if (priv->s_tid_tail == priv->s_tid_cur)4993		return;4994	for (i = priv->s_tid_tail + 1; ; i++) {4995		if (i == qp->s_size)4996			i = 0;4997 4998		if (i == priv->s_tid_cur)4999			break;5000		wqe = rvt_get_swqe_ptr(qp, i);5001		if (wqe->wr.opcode == IB_WR_TID_RDMA_WRITE)5002			break;5003	}5004	priv->s_tid_tail = i;5005	priv->s_state = TID_OP(WRITE_RESP);5006}5007 5008int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps)5009	__must_hold(&qp->s_lock)5010{5011	struct hfi1_qp_priv *priv = qp->priv;5012	struct rvt_swqe *wqe;5013	u32 bth1 = 0, bth2 = 0, hwords = 5, len, middle = 0;5014	struct ib_other_headers *ohdr;5015	struct rvt_sge_state *ss = &qp->s_sge;5016	struct rvt_ack_entry *e = &qp->s_ack_queue[qp->s_tail_ack_queue];5017	struct tid_rdma_request *req = ack_to_tid_req(e);5018	bool last = false;5019	u8 opcode = TID_OP(WRITE_DATA);5020 5021	lockdep_assert_held(&qp->s_lock);5022	trace_hfi1_tid_write_sender_make_tid_pkt(qp, 0);5023	/*5024	 * Prioritize the sending of the requests and responses over the5025	 * sending of the TID RDMA data packets.5026	 */5027	if (((atomic_read(&priv->n_tid_requests) < HFI1_TID_RDMA_WRITE_CNT) &&5028	     atomic_read(&priv->n_requests) &&5029	     !(qp->s_flags & (RVT_S_BUSY | RVT_S_WAIT_ACK |5030			     HFI1_S_ANY_WAIT_IO))) ||5031	    (e->opcode == TID_OP(WRITE_REQ) && req->cur_seg < req->alloc_seg &&5032	     !(qp->s_flags & (RVT_S_BUSY | HFI1_S_ANY_WAIT_IO)))) {5033		struct iowait_work *iowork;5034 5035		iowork = iowait_get_ib_work(&priv->s_iowait);5036		ps->s_txreq = get_waiting_verbs_txreq(iowork);5037		if (ps->s_txreq || hfi1_make_rc_req(qp, ps)) {5038			priv->s_flags |= HFI1_S_TID_BUSY_SET;5039			return 1;5040		}5041	}5042 5043	ps->s_txreq = get_txreq(ps->dev, qp);5044	if (!ps->s_txreq)5045		goto bail_no_tx;5046 5047	ohdr = &ps->s_txreq->phdr.hdr.ibh.u.oth;5048 5049	if ((priv->s_flags & RVT_S_ACK_PENDING) &&5050	    make_tid_rdma_ack(qp, ohdr, ps))5051		return 1;5052 5053	/*5054	 * Bail out if we can't send data.5055	 * Be reminded that this check must been done after the call to5056	 * make_tid_rdma_ack() because the responding QP could be in5057	 * RTR state where it can send TID RDMA ACK, not TID RDMA WRITE DATA.5058	 */5059	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK))5060		goto bail;5061 5062	if (priv->s_flags & RVT_S_WAIT_ACK)5063		goto bail;5064 5065	/* Check whether there is anything to do. */5066	if (priv->s_tid_tail == HFI1_QP_WQE_INVALID)5067		goto bail;5068	wqe = rvt_get_swqe_ptr(qp, priv->s_tid_tail);5069	req = wqe_to_tid_req(wqe);5070	trace_hfi1_tid_req_make_tid_pkt(qp, 0, wqe->wr.opcode, wqe->psn,5071					wqe->lpsn, req);5072	switch (priv->s_state) {5073	case TID_OP(WRITE_REQ):5074	case TID_OP(WRITE_RESP):5075		priv->tid_ss.sge = wqe->sg_list[0];5076		priv->tid_ss.sg_list = wqe->sg_list + 1;5077		priv->tid_ss.num_sge = wqe->wr.num_sge;5078		priv->tid_ss.total_len = wqe->length;5079 5080		if (priv->s_state == TID_OP(WRITE_REQ))5081			hfi1_tid_rdma_restart_req(qp, wqe, &bth2);5082		priv->s_state = TID_OP(WRITE_DATA);5083		fallthrough;5084 5085	case TID_OP(WRITE_DATA):5086		/*5087		 * 1. Check whether TID RDMA WRITE RESP available.5088		 * 2. If no:5089		 *    2.1 If have more segments and no TID RDMA WRITE RESP,5090		 *        set HFI1_S_WAIT_TID_RESP5091		 *    2.2 Return indicating no progress made.5092		 * 3. If yes:5093		 *    3.1 Build TID RDMA WRITE DATA packet.5094		 *    3.2 If last packet in segment:5095		 *        3.2.1 Change KDETH header bits5096		 *        3.2.2 Advance RESP pointers.5097		 *    3.3 Return indicating progress made.5098		 */5099		trace_hfi1_sender_make_tid_pkt(qp);5100		trace_hfi1_tid_write_sender_make_tid_pkt(qp, 0);5101		wqe = rvt_get_swqe_ptr(qp, priv->s_tid_tail);5102		req = wqe_to_tid_req(wqe);5103		len = wqe->length;5104 5105		if (!req->comp_seg || req->cur_seg == req->comp_seg)5106			goto bail;5107 5108		trace_hfi1_tid_req_make_tid_pkt(qp, 0, wqe->wr.opcode,5109						wqe->psn, wqe->lpsn, req);5110		last = hfi1_build_tid_rdma_packet(wqe, ohdr, &bth1, &bth2,5111						  &len);5112 5113		if (last) {5114			/* move pointer to next flow */5115			req->clear_tail = CIRC_NEXT(req->clear_tail,5116						    MAX_FLOWS);5117			if (++req->cur_seg < req->total_segs) {5118				if (!CIRC_CNT(req->setup_head, req->clear_tail,5119					      MAX_FLOWS))5120					qp->s_flags |= HFI1_S_WAIT_TID_RESP;5121			} else {5122				priv->s_state = TID_OP(WRITE_DATA_LAST);5123				opcode = TID_OP(WRITE_DATA_LAST);5124 5125				/* Advance the s_tid_tail now */5126				update_tid_tail(qp);5127			}5128		}5129		hwords += sizeof(ohdr->u.tid_rdma.w_data) / sizeof(u32);5130		ss = &priv->tid_ss;5131		break;5132 5133	case TID_OP(RESYNC):5134		trace_hfi1_sender_make_tid_pkt(qp);5135		/* Use generation from the most recently received response */5136		wqe = rvt_get_swqe_ptr(qp, priv->s_tid_cur);5137		req = wqe_to_tid_req(wqe);5138		/* If no responses for this WQE look at the previous one */5139		if (!req->comp_seg) {5140			wqe = rvt_get_swqe_ptr(qp,5141					       (!priv->s_tid_cur ? qp->s_size :5142						priv->s_tid_cur) - 1);5143			req = wqe_to_tid_req(wqe);5144		}5145		hwords += hfi1_build_tid_rdma_resync(qp, wqe, ohdr, &bth1,5146						     &bth2,5147						     CIRC_PREV(req->setup_head,5148							       MAX_FLOWS));5149		ss = NULL;5150		len = 0;5151		opcode = TID_OP(RESYNC);5152		break;5153 5154	default:5155		goto bail;5156	}5157	if (priv->s_flags & RVT_S_SEND_ONE) {5158		priv->s_flags &= ~RVT_S_SEND_ONE;5159		priv->s_flags |= RVT_S_WAIT_ACK;5160		bth2 |= IB_BTH_REQ_ACK;5161	}5162	qp->s_len -= len;5163	ps->s_txreq->hdr_dwords = hwords;5164	ps->s_txreq->sde = priv->s_sde;5165	ps->s_txreq->ss = ss;5166	ps->s_txreq->s_cur_size = len;5167	hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2,5168			     middle, ps);5169	return 1;5170bail:5171	hfi1_put_txreq(ps->s_txreq);5172bail_no_tx:5173	ps->s_txreq = NULL;5174	priv->s_flags &= ~RVT_S_BUSY;5175	/*5176	 * If we didn't get a txreq, the QP will be woken up later to try5177	 * again, set the flags to the wake up which work item to wake5178	 * up.5179	 * (A better algorithm should be found to do this and generalize the5180	 * sleep/wakeup flags.)5181	 */5182	iowait_set_flag(&priv->s_iowait, IOWAIT_PENDING_TID);5183	return 0;5184}5185 5186static int make_tid_rdma_ack(struct rvt_qp *qp,5187			     struct ib_other_headers *ohdr,5188			     struct hfi1_pkt_state *ps)5189{5190	struct rvt_ack_entry *e;5191	struct hfi1_qp_priv *qpriv = qp->priv;5192	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);5193	u32 hwords, next;5194	u32 len = 0;5195	u32 bth1 = 0, bth2 = 0;5196	int middle = 0;5197	u16 flow;5198	struct tid_rdma_request *req, *nreq;5199 5200	trace_hfi1_tid_write_rsp_make_tid_ack(qp);5201	/* Don't send an ACK if we aren't supposed to. */5202	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK))5203		goto bail;5204 5205	/* header size in 32-bit words LRH+BTH = (8+12)/4. */5206	hwords = 5;5207 5208	e = &qp->s_ack_queue[qpriv->r_tid_ack];5209	req = ack_to_tid_req(e);5210	/*5211	 * In the RESYNC case, we are exactly one segment past the5212	 * previously sent ack or at the previously sent NAK. So to send5213	 * the resync ack, we go back one segment (which might be part of5214	 * the previous request) and let the do-while loop execute again.5215	 * The advantage of executing the do-while loop is that any data5216	 * received after the previous ack is automatically acked in the5217	 * RESYNC ack. It turns out that for the do-while loop we only need5218	 * to pull back qpriv->r_tid_ack, not the segment5219	 * indices/counters. The scheme works even if the previous request5220	 * was not a TID WRITE request.5221	 */5222	if (qpriv->resync) {5223		if (!req->ack_seg || req->ack_seg == req->total_segs)5224			qpriv->r_tid_ack = !qpriv->r_tid_ack ?5225				rvt_size_atomic(&dev->rdi) :5226				qpriv->r_tid_ack - 1;5227		e = &qp->s_ack_queue[qpriv->r_tid_ack];5228		req = ack_to_tid_req(e);5229	}5230 5231	trace_hfi1_rsp_make_tid_ack(qp, e->psn);5232	trace_hfi1_tid_req_make_tid_ack(qp, 0, e->opcode, e->psn, e->lpsn,5233					req);5234	/*5235	 * If we've sent all the ACKs that we can, we are done5236	 * until we get more segments...5237	 */5238	if (!qpriv->s_nak_state && !qpriv->resync &&5239	    req->ack_seg == req->comp_seg)5240		goto bail;5241 5242	do {5243		/*5244		 * To deal with coalesced ACKs, the acked_tail pointer5245		 * into the flow array is used. The distance between it5246		 * and the clear_tail is the number of flows that are5247		 * being ACK'ed.5248		 */5249		req->ack_seg +=5250			/* Get up-to-date value */5251			CIRC_CNT(req->clear_tail, req->acked_tail,5252				 MAX_FLOWS);5253		/* Advance acked index */5254		req->acked_tail = req->clear_tail;5255 5256		/*5257		 * req->clear_tail points to the segment currently being5258		 * received. So, when sending an ACK, the previous5259		 * segment is being ACK'ed.5260		 */5261		flow = CIRC_PREV(req->acked_tail, MAX_FLOWS);5262		if (req->ack_seg != req->total_segs)5263			break;5264		req->state = TID_REQUEST_COMPLETE;5265 5266		next = qpriv->r_tid_ack + 1;5267		if (next > rvt_size_atomic(&dev->rdi))5268			next = 0;5269		qpriv->r_tid_ack = next;5270		if (qp->s_ack_queue[next].opcode != TID_OP(WRITE_REQ))5271			break;5272		nreq = ack_to_tid_req(&qp->s_ack_queue[next]);5273		if (!nreq->comp_seg || nreq->ack_seg == nreq->comp_seg)5274			break;5275 5276		/* Move to the next ack entry now */5277		e = &qp->s_ack_queue[qpriv->r_tid_ack];5278		req = ack_to_tid_req(e);5279	} while (1);5280 5281	/*5282	 * At this point qpriv->r_tid_ack == qpriv->r_tid_tail but e and5283	 * req could be pointing at the previous ack queue entry5284	 */5285	if (qpriv->s_nak_state ||5286	    (qpriv->resync &&5287	     !hfi1_tid_rdma_is_resync_psn(qpriv->r_next_psn_kdeth - 1) &&5288	     (cmp_psn(qpriv->r_next_psn_kdeth - 1,5289		      full_flow_psn(&req->flows[flow],5290				    req->flows[flow].flow_state.lpsn)) > 0))) {5291		/*5292		 * A NAK will implicitly acknowledge all previous TID RDMA5293		 * requests. Therefore, we NAK with the req->acked_tail5294		 * segment for the request at qpriv->r_tid_ack (same at5295		 * this point as the req->clear_tail segment for the5296		 * qpriv->r_tid_tail request)5297		 */5298		e = &qp->s_ack_queue[qpriv->r_tid_ack];5299		req = ack_to_tid_req(e);5300		flow = req->acked_tail;5301	} else if (req->ack_seg == req->total_segs &&5302		   qpriv->s_flags & HFI1_R_TID_WAIT_INTERLCK)5303		qpriv->s_flags &= ~HFI1_R_TID_WAIT_INTERLCK;5304 5305	trace_hfi1_tid_write_rsp_make_tid_ack(qp);5306	trace_hfi1_tid_req_make_tid_ack(qp, 0, e->opcode, e->psn, e->lpsn,5307					req);5308	hwords += hfi1_build_tid_rdma_write_ack(qp, e, ohdr, flow, &bth1,5309						&bth2);5310	len = 0;5311	qpriv->s_flags &= ~RVT_S_ACK_PENDING;5312	ps->s_txreq->hdr_dwords = hwords;5313	ps->s_txreq->sde = qpriv->s_sde;5314	ps->s_txreq->s_cur_size = len;5315	ps->s_txreq->ss = NULL;5316	hfi1_make_ruc_header(qp, ohdr, (TID_OP(ACK) << 24), bth1, bth2, middle,5317			     ps);5318	ps->s_txreq->txreq.flags |= SDMA_TXREQ_F_VIP;5319	return 1;5320bail:5321	/*5322	 * Ensure s_rdma_ack_cnt changes are committed prior to resetting5323	 * RVT_S_RESP_PENDING5324	 */5325	smp_wmb();5326	qpriv->s_flags &= ~RVT_S_ACK_PENDING;5327	return 0;5328}5329 5330static int hfi1_send_tid_ok(struct rvt_qp *qp)5331{5332	struct hfi1_qp_priv *priv = qp->priv;5333 5334	return !(priv->s_flags & RVT_S_BUSY ||5335		 qp->s_flags & HFI1_S_ANY_WAIT_IO) &&5336		(verbs_txreq_queued(iowait_get_tid_work(&priv->s_iowait)) ||5337		 (priv->s_flags & RVT_S_RESP_PENDING) ||5338		 !(qp->s_flags & HFI1_S_ANY_TID_WAIT_SEND));5339}5340 5341void _hfi1_do_tid_send(struct work_struct *work)5342{5343	struct iowait_work *w = container_of(work, struct iowait_work, iowork);5344	struct rvt_qp *qp = iowait_to_qp(w->iow);5345 5346	hfi1_do_tid_send(qp);5347}5348 5349static void hfi1_do_tid_send(struct rvt_qp *qp)5350{5351	struct hfi1_pkt_state ps;5352	struct hfi1_qp_priv *priv = qp->priv;5353 5354	ps.dev = to_idev(qp->ibqp.device);5355	ps.ibp = to_iport(qp->ibqp.device, qp->port_num);5356	ps.ppd = ppd_from_ibp(ps.ibp);5357	ps.wait = iowait_get_tid_work(&priv->s_iowait);5358	ps.in_thread = false;5359	ps.timeout_int = qp->timeout_jiffies / 8;5360 5361	trace_hfi1_rc_do_tid_send(qp, false);5362	spin_lock_irqsave(&qp->s_lock, ps.flags);5363 5364	/* Return if we are already busy processing a work request. */5365	if (!hfi1_send_tid_ok(qp)) {5366		if (qp->s_flags & HFI1_S_ANY_WAIT_IO)5367			iowait_set_flag(&priv->s_iowait, IOWAIT_PENDING_TID);5368		spin_unlock_irqrestore(&qp->s_lock, ps.flags);5369		return;5370	}5371 5372	priv->s_flags |= RVT_S_BUSY;5373 5374	ps.timeout = jiffies + ps.timeout_int;5375	ps.cpu = priv->s_sde ? priv->s_sde->cpu :5376		cpumask_first(cpumask_of_node(ps.ppd->dd->node));5377	ps.pkts_sent = false;5378 5379	/* insure a pre-built packet is handled  */5380	ps.s_txreq = get_waiting_verbs_txreq(ps.wait);5381	do {5382		/* Check for a constructed packet to be sent. */5383		if (ps.s_txreq) {5384			if (priv->s_flags & HFI1_S_TID_BUSY_SET) {5385				qp->s_flags |= RVT_S_BUSY;5386				ps.wait = iowait_get_ib_work(&priv->s_iowait);5387			}5388			spin_unlock_irqrestore(&qp->s_lock, ps.flags);5389 5390			/*5391			 * If the packet cannot be sent now, return and5392			 * the send tasklet will be woken up later.5393			 */5394			if (hfi1_verbs_send(qp, &ps))5395				return;5396 5397			/* allow other tasks to run */5398			if (hfi1_schedule_send_yield(qp, &ps, true))5399				return;5400 5401			spin_lock_irqsave(&qp->s_lock, ps.flags);5402			if (priv->s_flags & HFI1_S_TID_BUSY_SET) {5403				qp->s_flags &= ~RVT_S_BUSY;5404				priv->s_flags &= ~HFI1_S_TID_BUSY_SET;5405				ps.wait = iowait_get_tid_work(&priv->s_iowait);5406				if (iowait_flag_set(&priv->s_iowait,5407						    IOWAIT_PENDING_IB))5408					hfi1_schedule_send(qp);5409			}5410		}5411	} while (hfi1_make_tid_rdma_pkt(qp, &ps));5412	iowait_starve_clear(ps.pkts_sent, &priv->s_iowait);5413	spin_unlock_irqrestore(&qp->s_lock, ps.flags);5414}5415 5416static bool _hfi1_schedule_tid_send(struct rvt_qp *qp)5417{5418	struct hfi1_qp_priv *priv = qp->priv;5419	struct hfi1_ibport *ibp =5420		to_iport(qp->ibqp.device, qp->port_num);5421	struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);5422	struct hfi1_devdata *dd = ppd->dd;5423 5424	if ((dd->flags & HFI1_SHUTDOWN))5425		return true;5426 5427	return iowait_tid_schedule(&priv->s_iowait, ppd->hfi1_wq,5428				   priv->s_sde ?5429				   priv->s_sde->cpu :5430				   cpumask_first(cpumask_of_node(dd->node)));5431}5432 5433/**5434 * hfi1_schedule_tid_send - schedule progress on TID RDMA state machine5435 * @qp: the QP5436 *5437 * This schedules qp progress on the TID RDMA state machine. Caller5438 * should hold the s_lock.5439 * Unlike hfi1_schedule_send(), this cannot use hfi1_send_ok() because5440 * the two state machines can step on each other with respect to the5441 * RVT_S_BUSY flag.5442 * Therefore, a modified test is used.5443 *5444 * Return: %true if the second leg is scheduled;5445 *  %false if the second leg is not scheduled.5446 */5447bool hfi1_schedule_tid_send(struct rvt_qp *qp)5448{5449	lockdep_assert_held(&qp->s_lock);5450	if (hfi1_send_tid_ok(qp)) {5451		/*5452		 * The following call returns true if the qp is not on the5453		 * queue and false if the qp is already on the queue before5454		 * this call. Either way, the qp will be on the queue when the5455		 * call returns.5456		 */5457		_hfi1_schedule_tid_send(qp);5458		return true;5459	}5460	if (qp->s_flags & HFI1_S_ANY_WAIT_IO)5461		iowait_set_flag(&((struct hfi1_qp_priv *)qp->priv)->s_iowait,5462				IOWAIT_PENDING_TID);5463	return false;5464}5465 5466bool hfi1_tid_rdma_ack_interlock(struct rvt_qp *qp, struct rvt_ack_entry *e)5467{5468	struct rvt_ack_entry *prev;5469	struct tid_rdma_request *req;5470	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);5471	struct hfi1_qp_priv *priv = qp->priv;5472	u32 s_prev;5473 5474	s_prev = qp->s_tail_ack_queue == 0 ? rvt_size_atomic(&dev->rdi) :5475		(qp->s_tail_ack_queue - 1);5476	prev = &qp->s_ack_queue[s_prev];5477 5478	if ((e->opcode == TID_OP(READ_REQ) ||5479	     e->opcode == OP(RDMA_READ_REQUEST)) &&5480	    prev->opcode == TID_OP(WRITE_REQ)) {5481		req = ack_to_tid_req(prev);5482		if (req->ack_seg != req->total_segs) {5483			priv->s_flags |= HFI1_R_TID_WAIT_INTERLCK;5484			return true;5485		}5486	}5487	return false;5488}5489 5490static u32 read_r_next_psn(struct hfi1_devdata *dd, u8 ctxt, u8 fidx)5491{5492	u64 reg;5493 5494	/*5495	 * The only sane way to get the amount of5496	 * progress is to read the HW flow state.5497	 */5498	reg = read_uctxt_csr(dd, ctxt, RCV_TID_FLOW_TABLE + (8 * fidx));5499	return mask_psn(reg);5500}5501 5502static void tid_rdma_rcv_err(struct hfi1_packet *packet,5503			     struct ib_other_headers *ohdr,5504			     struct rvt_qp *qp, u32 psn, int diff, bool fecn)5505{5506	unsigned long flags;5507 5508	tid_rdma_rcv_error(packet, ohdr, qp, psn, diff);5509	if (fecn) {5510		spin_lock_irqsave(&qp->s_lock, flags);5511		qp->s_flags |= RVT_S_ECN;5512		spin_unlock_irqrestore(&qp->s_lock, flags);5513	}5514}5515 5516static void update_r_next_psn_fecn(struct hfi1_packet *packet,5517				   struct hfi1_qp_priv *priv,5518				   struct hfi1_ctxtdata *rcd,5519				   struct tid_rdma_flow *flow,5520				   bool fecn)5521{5522	/*5523	 * If a start/middle packet is delivered here due to5524	 * RSM rule and FECN, we need to update the r_next_psn.5525	 */5526	if (fecn && packet->etype == RHF_RCV_TYPE_EAGER &&5527	    !(priv->s_flags & HFI1_R_TID_SW_PSN)) {5528		struct hfi1_devdata *dd = rcd->dd;5529 5530		flow->flow_state.r_next_psn =5531			read_r_next_psn(dd, rcd->ctxt, flow->idx);5532	}5533}5534