cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tid_rdma.c (160823B)


      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 protocol
     17 *
     18 * This is an end-to-end protocol at the hfi1 level between two nodes that
     19 * improves performance by avoiding data copy on the requester side. It
     20 * converts a qualified RDMA READ request into a TID RDMA READ request on
     21 * the requester side and thereafter handles the request and response
     22 * differently. To be qualified, the RDMA READ request should meet the
     23 * 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 0xFFFFF
     41
     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                   32
     55#define HFI1_KERNEL_MIN_JKEY HFI1_ADMIN_JKEY_RANGE
     56#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  6
     60#define TID_RDMA_MAX_WRITE_SEGS_PER_REQ 4
     61#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      11
     68#define TID_RDMA_DESTQP_FLOW_MASK       0x1f
     69
     70#define TID_OPFN_QP_CTXT_MASK 0xff
     71#define TID_OPFN_QP_CTXT_SHIFT 56
     72#define TID_OPFN_QP_KDETH_MASK 0xff
     73#define TID_OPFN_QP_KDETH_SHIFT 48
     74#define TID_OPFN_MAX_LEN_MASK 0x7ff
     75#define TID_OPFN_MAX_LEN_SHIFT 37
     76#define TID_OPFN_TIMEOUT_MASK 0x1f
     77#define TID_OPFN_TIMEOUT_SHIFT 32
     78#define TID_OPFN_RESERVED_MASK 0x3f
     79#define TID_OPFN_RESERVED_SHIFT 26
     80#define TID_OPFN_URG_MASK 0x1
     81#define TID_OPFN_URG_SHIFT 25
     82#define TID_OPFN_VER_MASK 0x7
     83#define TID_OPFN_VER_SHIFT 22
     84#define TID_OPFN_JKEY_MASK 0x3f
     85#define TID_OPFN_JKEY_SHIFT 16
     86#define TID_OPFN_MAX_READ_MASK 0x3f
     87#define TID_OPFN_MAX_READ_SHIFT 10
     88#define TID_OPFN_MAX_WRITE_MASK 0x3f
     89#define TID_OPFN_MAX_WRITE_SHIFT 4
     90
     91/*
     92 * OPFN TID layout
     93 *
     94 * 63               47               31               15
     95 * NNNNNNNNKKKKKKKK MMMMMMMMMMMTTTTT DDDDDDUVVVJJJJJJ RRRRRRWWWWWWCCCC
     96 * 3210987654321098 7654321098765432 1098765432109876 5432109876543210
     97 * N - the context Number
     98 * K - the Kdeth_qp
     99 * M - Max_len
    100 * T - Timeout
    101 * D - reserveD
    102 * V - version
    103 * U - Urg capable
    104 * J - Jkey
    105 * R - max_Read
    106 * W - max_Write
    107 * C - Capcode
    108 */
    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	return
    160		(((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 the
    225	 * negotiation process
    226	 */
    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 retry
    232	 *   the negotiation
    233	 * * at the responder, 0 being returned to the requester so as to
    234	 *   disable TID RDMA at both the requester and the responder
    235	 */
    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 to
    251	 * remote->max_len only when the request's data length is smaller
    252	 * 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_seg
    254	 * during retry, it will lead to req->cur_seg = 0, which is exactly
    255	 * 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 indicate
    277	 * TID RDMA could not be enabled. This will result in TID RDMA being
    278	 * 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 qp
    312 * @rdi: rvt dev struct
    313 * @qp: the qp
    314 *
    315 * This routine returns the receive context associated
    316 * with a a qp's qpn.
    317 *
    318 * Returns 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	else
    334		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 ordering
    442 *
    443 * There are two locks involved with the queuing
    444 * routines: the qp s_lock and the exp_lock.
    445 *
    446 * Since the tid space allocation is called from
    447 * 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 of
    452 * the rcd wait queue to be fetched under the exp_lock and
    453 * followed by a drop of the exp_lock.
    454 *
    455 * Any qp in the wait list will have the qp reference count held
    456 * to hold the qp in memory.
    457 */
    458
    459/*
    460 * return head of rcd wait list
    461 *
    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 local
    467 * 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 wait
    487 * @rcd: the receive context
    488 * @queue: the queue to operate on
    489 * @qp: the head of the qp being processed
    490 *
    491 * This routine will return false IFF
    492 * the list is NULL or the head of the
    493 * 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 or
    500 * 2. The indicated qp is at the head of the list and the
    501 *    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 list
    522 * @rcd: the receive context
    523 * @queue: the queue to operate on
    524 * @qp: the qp to remove the wait list
    525 *
    526 * This routine removes the indicated qp from the
    527 * wait list if it is there.
    528 *
    529 * This should be done after the hardware flow and
    530 * 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_flags
    535 * 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 space
    555 * @rcd: the receive context
    556 * @queue: the queue to operate on
    557 * @qp: the qp
    558 *
    559 * The qp is inserted at the tail of the rcd
    560 * 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 waiter
    584 * @qp: the qp
    585 *
    586 * This is a private entrance to schedule the qp
    587 * 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 qp
    601 * @qp: the qp
    602 *
    603 * trigger a schedule or a waiting qp in a deadlock
    604 * safe manner.  The qp reference is held prior
    605 * to this call via first_qp().
    606 *
    607 * If the qp trigger was already scheduled (!rval)
    608 * the reference is dropped, otherwise the resume
    609 * 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 request
    638 * @work: the work item
    639 *
    640 * Complete the off qp trigger processing by directly
    641 * 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 wait
    664 *
    665 * This is called when resetting a qp to
    666 * allow a destroy or reset to get rid
    667 * 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 flow
    701 * @rcd: the context to use for allocation
    702 * @last: the index of the preferred flow. Use RXE_NUM_TID_FLOWS to
    703 *         signify "don't care".
    704 *
    705 * Use a bit mask based allocation to reserve a hardware
    706 * flow for use in receiving KDETH data packets. If a preferred flow is
    707 * specified the function will attempt to reserve that flow again, if
    708 * available.
    709 *
    710 * The exp_lock must be held.
    711 *
    712 * Return:
    713 * On success: a value postive value between 0 and RXE_NUM_TID_FLOWS - 1
    714 * On failure: -EAGAIN
    715 */
    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(prandom_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 info
    868 * @flow: overall info for a TID RDMA segment
    869 * @pages: pointer to an array of page structs
    870 * @npages: number of pages
    871 * @list: page set array to return
    872 *
    873 * This routine returns the number of groups associated with
    874 * the current sge information.  This implementation is based
    875 * on the expected receive find_phys_blocks() adjusted to
    876 * use the MR information vs. the pfn.
    877 *
    878 * Return:
    879 * the number of RcvArray entries
    880 */
    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 by
    895	 * 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 physically
    905		 * contiguous.
    906		 */
    907		if (this_vaddr != (vaddr + PAGE_SIZE)) {
    908			/*
    909			 * At this point we have to loop over the set of
    910			 * physically contiguous pages and break them down it
    911			 * 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 that
    915			 *        program only a MAX_EXPECTED_BUFFER chunk.
    916			 *     2. The buffer size has to be a power of two. If
    917			 *        it is not, round down to the closes power of
    918			 *        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 pagesets
    958 * @list: list of pagesets
    959 * @idx: pointer to current page index
    960 * @pages: number of pages to dump
    961 * @sets: current number of pagesset
    962 *
    963 * This routine flushes out accumuated pages.
    964 *
    965 * To insure an even number of sets the
    966 * code may add a filler.
    967 *
    968 * This can happen with when pages is not
    969 * a power of 2 or pages is a power of 2
    970 * less than the maximum pages.
    971 *
    972 * Return:
    973 * The new number of sets
    974 */
    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 info
    999 * @flow: overall info for a TID RDMA segment
   1000 * @pages: pointer to an array of page structs
   1001 * @npages: number of pages
   1002 * @list: page set array to return
   1003 *
   1004 * This routine parses an array of pages to compute pagesets
   1005 * in an 8k compatible way.
   1006 *
   1007 * pages are tested two at a time, i, i + 1 for contiguous
   1008 * pages and i - 1 and i contiguous pages.
   1009 *
   1010 * If any condition is false, any accumlated pages are flushed and
   1011 * v0,v1 are emitted as separate PAGE_SIZE pagesets
   1012 *
   1013 * Otherwise, the current 8k is totaled for a future flush.
   1014 *
   1015 * Return:
   1016 * The number of pagesets
   1017 * list set with the returned number of pagesets
   1018 *
   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 function
   1076 * does not check the sge, the sge must have been checked for alignment with a
   1077 * prior call to hfi1_kern_trdma_ok. Other sge checking is done as part of
   1078 * rvt_lkey_ok and rvt_rkey_ok. Also, the function only modifies the local sge
   1079 * 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 not
   1082 * 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 progress
   1084 * into the sg_list. This is done by the cur_seg cursor in the tid_rdma_request
   1085 * 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 a
   1173 * 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	else
   1197		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 context
   1226 *
   1227 * This function allocates TID's without moving groups between lists or
   1228 * modifying grp->map. This is done as follows, being cogizant of the lists
   1229 * 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 used
   1232 * 2. If more TID's are needed allocate from used (will move from used->full or
   1233 *    stay in used)
   1234 * 3. If we still don't have the required number of TID's go back and look again
   1235 *    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 the
   1278	 * complete groups list from the first loop above
   1279	 */
   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 (with
   1332		 * tidctrl 0x3), if ALL these are true (a) the bit pos is even
   1333		 * (b) the group map shows current and the next bits as free
   1334		 * indicating two consecutive rcvarry entries are available (c)
   1335		 * we actually need 2 more entries
   1336		 */
   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 a
   1421 * TID RDMA request
   1422 *
   1423 * @req: TID RDMA request for which the segment/flow is being set up
   1424 * @ss: sge state, maintains state across successive segments of a sge
   1425 * @last: set to true after the last sge segment has been processed
   1426 *
   1427 * This function
   1428 * (1) finds a free flow entry in the flow circular buffer
   1429 * (2) finds pages and continuous physical chunks constituing one segment
   1430 *     of an sge
   1431 * (3) allocates TID group entries for those chunks
   1432 * (4) programs rcvarray entries in the hardware corresponding to those
   1433 *     TID's
   1434 * (5) computes a tidarray with formatted TID entries which can be sent
   1435 *     to the sender
   1436 * (6) Reserves and programs HW flows.
   1437 * (7) It also manages queing the QP when TID/flow resources are not
   1438 *     available.
   1439 *
   1440 * @req points to struct tid_rdma_request of which the segments are a part. The
   1441 * 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 this
   1443 * 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 RDMA
   1445 * sends and flow->npkts contains number of packets required to send the
   1446 * segment.
   1447 *
   1448 * hfi1_check_sge_align should be called prior to calling this function and if
   1449 * it signals error TID RDMA cannot be used for this sge and this function
   1450 * should not be called.
   1451 *
   1452 * For the queuing, caller must hold the flow->req->qp s_lock from the send
   1453 * engine and the function will procure the exp_lock.
   1454 *
   1455 * Return:
   1456 * The function returns -EAGAIN if sufficient number of TID/flow resources to
   1457 * map the segment could not be allocated. In this case the function should be
   1458 * called again with previous arguments to retry the TID allocation. There are
   1459 * 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 flow
   1475	 * 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 the
   1477	 * 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 segment
   1486	 * If we can not determine a DMA address mapping we will treat it just
   1487	 * 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 of
   1500	 * TID's to map the segment. Allocate the TID's from the TID groups. If
   1501	 * we cannot allocate the required number we exit and try again later
   1502	 */
   1503	if (kern_alloc_tids(flow))
   1504		goto queue;
   1505	/*
   1506	 * Finally program the TID entries with the pagesets, compute the
   1507	 * tidarray and enable the HW flow
   1508	 */
   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 packets
   1514	 * for the segment.
   1515	 * The flow is setup here as this is the most accurate time and place
   1516	 * to do so. Doing at a later time runs the risk of the flow data in
   1517	 * 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 to
   1549 * release the flow and TID HW/SW resources for that segment. The segments for a
   1550 * TID RDMA request are setup and cleared in FIFO order which is managed using a
   1551 * 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 for
   1594 * 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 priviously allocated flow information
   1608 * @req: the tid rdma request to be cleaned
   1609 */
   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 QPs
   1618 * @qp: the queue patch
   1619 * @wqe: the send wqe
   1620 */
   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 they
   1662	 * can be pre-initialized here before the WRs has
   1663	 * even been submitted.
   1664	 * However, non-NULL values for these variables do not
   1665	 * imply that this WQE has been enabled for TID RDMA.
   1666	 * Drivers should check the WQE's opcode to determine
   1667	 * 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 the
   1732	 * 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 request
   1785 *       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 pending
   1804	 * 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 should
   1818	 * have been allocated before. In this case, req->flow_idx should
   1819	 * 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 whose
   1826			 * earlier segments have been re-sent. We need to
   1827			 * 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 for
   1837		 * 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 after
   1850		 * 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 has
   1857			 * 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 a
   1914	 * 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 pair
   1926		 * should be the sum of the buffer size described by each
   1927		 * tid entry. However, only the first entry needs to be
   1928		 * 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 original
   2034		 * 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 have
   2053		 * been sent out and this request is complete (old_request
   2054		 * == false) and the TID flow may be unusable (the
   2055		 * req->clear_tail is advanced). However, when an earlier
   2056		 * request is received, this request will not be complete any
   2057		 * more (qp->s_tail_ack_queue is moved back, see below).
   2058		 * Consequently, we need to update the TID flow info everytime
   2059		 * 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 (between
   2068		 * 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 (between
   2086		 * qp->s_tail_ack_queue and qp->r_head_ack_queue).
   2087		 * Also, don't change requests, which are at the SYNC
   2088		 * 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 to
   2107			 * pick up the change. Otherwise, normal response
   2108			 * 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 qp
   2116		 * 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 have
   2122		 * not received data yet (flow_idx != clear_tail), the flow_idx
   2123		 * pointer needs to be adjusted so the same responses can be
   2124		 * 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 duplicate
   2139			 * request for a segment, which has not been allocated
   2140			 * yet. In that case, don't adjust this request.
   2141			 * However, we still want to go through the loop below
   2142			 * 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 including
   2154			 * s_tail_ack_queue
   2155			 */
   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, the
   2188	 * qp->s_ack_state must be changed to re-initialize
   2189	 * qp->s_ack_rdma_sge; Otherwise, we will end up in
   2190	 * 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 RNRNAK
   2196	 * 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_READ
   2221	 *    (see hfi1_rc_rcv())
   2222	 * 2. Put TID RDMA READ REQ into the response queueu (s_ack_queue)
   2223	 *     - Setup struct tid_rdma_req with request info
   2224	 *     - 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 we
   2303	 * finish sending the result since a duplicate request would
   2304	 * 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 ack
   2313	 * queue, qpriv->r_tid_alloc follows qp->r_head_ack_queue. It is ok to
   2314	 * do this because of interlocks between these and TID WRITE
   2315	 * 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 (Requestor side */
   2443
   2444	/*
   2445	 * 1. Find matching SWQE
   2446	 * 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 is
   2484		 * delivered as an eager packet due to RSM rule and FECN.
   2485		 * The RSM rule selects FECN bit in BTH and SH bit in
   2486		 * KDETH header and therefore will not match the last
   2487		 * 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 cleanup
   2565	 * after sending the request and it's now safe to put the QP into error
   2566	 * state. However, if the wqe queue is empty (qp->s_acked == qp->s_tail
   2567	 * == qp->s_head), it would be unsafe to complete the wqe pointed by
   2568	 * qp->s_acked here. Putting the qp into error state will safely flush
   2569	 * 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 the
   2614	 * Eager buffer (packet that have payload) are TID RDMA WRITE
   2615	 * response packets. In this case, we have to re-transmit the
   2616	 * 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 is
   2651 * 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 write
   2685	 * requests and implicitly NAK RDMA read and atomic requests issued
   2686	 * 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 is
   2696		 * for a later operation, this NACK NAKs the RDMA read or
   2697		 * 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 are
   2723			 * 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 the
   2752			 * protocol falls back to SW PSN checking. This is done
   2753			 * to prevent continuous Flow Sequence errors for any
   2754			 * 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 restarted
   2769					 * request has come back, reset the
   2770					 * 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 and
   2782				 * this is the last packet in the segment, tell
   2783				 * 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 through
   2816			 * 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 this
   2911		 * 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 being
   2931	 * processed. These a completed sequentially so we can be sure that
   2932	 * 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 next
   2968				 * expected PSN, NAK the packet.
   2969				 * However, only do that if we know that the a
   2970				 * NAK has already been sent. Otherwise, this
   2971				 * mismatch could be due to packets that were
   2972				 * 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 this
   2984				 * is the last packet in the segment, tell the
   2985				 * 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	else
   3077		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 the
   3112		 * sequence is reset to 0. Since we've adjusted the npkts in the
   3113		 * flow and the SGE has been sufficiently advanced, we have to
   3114		 * 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	else
   3129		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 from
   3174	 * 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't
   3301	 * 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 not
   3352		 * update the pointer. We have to reset it so TID RDMA
   3353		 * 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 negotiated
   3378	 * 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 flow
   3406	 * queue. Rather than a computationaly expensive exact estimate of when
   3407	 * a flow will be available, we assume that if a QP is at position N in
   3408	 * the flow queue it has to wait approximately (N + 1) * (number of
   3409	 * segments between two sync points). The rationale for this is that
   3410	 * 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 required
   3437	 * 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 as
   3448 * well as the send thread when a queued QP is scheduled for
   3449 * resource allocation.
   3450 *
   3451 * Iterates over (a) segments of a request and then (b) queued requests
   3452 * themselves to allocate resources for up to local->max_write
   3453 * segments across multiple requests. Stop allocating when we
   3454 * hit a sync point, resume allocating after data packets at
   3455 * sync point have been received.
   3456 *
   3457 * Resource allocation and sending of responses is decoupled. The
   3458 * 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 been
   3482		 * scheduled to avoid messing up qp->r_psn: the RNR NAK will
   3483		 * be sent only when all allocated segments have been sent.
   3484		 * However, if more segments are allocated before that, TID RDMA
   3485		 * WRITE RESP packets will be sent out for these new segments
   3486		 * before the RNR NAK packet. When the requester receives the
   3487		 * 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 and
   3490		 * 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 the
   3555		 * QP is not queued in this case, and the issue can only be
   3556		 * caused by a delay in scheduling the second leg which we
   3557		 * cannot estimate, we use a rather arbitrary RNR timeout of
   3558		 * (MAX_FLOWS / 2) segments
   3559		 */
   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 allocation
   3587	 * has failed (b) we are called from the rcv handler interrupt context
   3588	 * (c) an RNR NAK has not already been scheduled
   3589	 */
   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 request
   3606	 * being RNR NAK'd. This allows resources to be allocated to the request
   3607	 * 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 in
   3615	 * hfi1_send_rc_ack() but must be set here before dropping qp->s_lock
   3616	 * for consistency
   3617	 */
   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 we
   3622	 * 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 NAK
   3629	 * has actually been sent. qp->s_flags RVT_S_ACK_PENDING bit cannot be
   3630	 * used for this because qp->s_lock is dropped before calling
   3631	 * hfi1_send_rc_ack() leading to inconsistency between the receive
   3632	 * 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 receive
   3638	 * interrupt handlers but will be sent from the send engine behind any
   3639	 * previous responses that may have been scheduled
   3640	 */
   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_FIRST
   3650	 *    (see hfi1_rc_rcv())
   3651	 *     - Don't allow 0-length requests.
   3652	 * 2. Put TID RDMA WRITE REQ into the response queueu (s_ack_queue)
   3653	 *     - Setup struct tid_rdma_req with request info
   3654	 *     - 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 the
   3701	 * location of the original request, which is one entry behind
   3702	 * r_head_ack_queue
   3703	 */
   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 we
   3779	 * finish sending the result since a duplicate request would
   3780	 * 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 was
   3857		 * later scheduled when resources became available
   3858		 */
   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 in
   3867		 * rnr_nak state, till the resent request is received
   3868		 */
   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 the
   3899	 * 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 outstanding
   4001		 * 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 (Requestor side */
   4030
   4031	/*
   4032	 * 1. Find matching SWQE
   4033	 * 2. Check that TIDENTRY array has enough space for a complete
   4034	 *    segment. If not, put QP in error state.
   4035	 * 3. Save response data in struct tid_rdma_req and struct tid_rdma_flow
   4036	 * 4. Remove HFI1_S_WAIT_TID_RESP from s_flags.
   4037	 * 5. Set qp->s_state
   4038	 * 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 number
   4072	 * 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 far
   4088	 * behind, don't overwrite segments. Just drop the packet and
   4089	 * 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 of
   4096	 * packet checks because it will end up updating the QP state.
   4097	 * Therefore, anything that would prevent the packet from
   4098	 * being accepted as a successful response should be prior
   4099	 * 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 a
   4139	 * 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 initial
   4159	 * 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 received
   4173	 * 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, the
   4176	 * 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 packet
   4290	 * 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 is
   4305		 * delivered as an eager packet due to RSM rule and FECN.
   4306		 * The RSM rule selects FECN bit in BTH and SH bit in
   4307		 * KDETH header and therefore will not match the last
   4308		 * 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 REQ
   4331			 * 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 outstanding
   4356	 *    segments have been completed, or
   4357	 *  - The entire request is complete and there are no more requests
   4358	 *    (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 the
   4386	 * 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		else
   4399			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 the
   4471		 * RESYNC PSN, then we never received a good TID RDMA WRITE
   4472		 * 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's
   4481			 * not possible to infer (or compute) the previous value
   4482			 * of r_next_psn_kdeth in the case of back-to-back
   4483			 * 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	else
   4528		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			else
   4591				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 RDMA
   4603			 * ACK is received after the TID retry timer is fired
   4604			 * again. In this case, do not send any more TID
   4605			 * 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 the
   4624			 * 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 remaining
   4640			 * segments. Also, PSN's start from 0 in the middle of a
   4641			 * segment and the first segment size is less than the
   4642			 * default number of packets. flow->resync_npkts is used
   4643			 * to track the number of packets from the start of the
   4644			 * real segment to the point of 0 PSN after the RESYNC
   4645			 * 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 a
   4651			 * segment and the new segment (likely from a new
   4652			 * request) starts with a new generation number, we
   4653			 * 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 ranges
   4662			 * 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 until
   4831			 * 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 be
   4894	 * from the current or previous generations
   4895	 */
   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 be
   4907		 * applied when a new flow is allocated
   4908		 */
   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 a
   4918	 * sync point and the flow has/will be reprogrammed
   4919	 */
   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 the
   4926	 * last received segment
   4927	 */
   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 request
   4981 * 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 the
   5025	 * 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 to
   5056	 * make_tid_rdma_ack() because the responding QP could be in
   5057	 * 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_RESP
   5091		 *    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 bits
   5096		 *        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 try
   5177	 * again, set the flags to the wake up which work item to wake
   5178	 * up.
   5179	 * (A better algorithm should be found to do this and generalize the
   5180	 * 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 the
   5212	 * previously sent ack or at the previously sent NAK. So to send
   5213	 * the resync ack, we go back one segment (which might be part of
   5214	 * the previous request) and let the do-while loop execute again.
   5215	 * The advantage of executing the do-while loop is that any data
   5216	 * received after the previous ack is automatically acked in the
   5217	 * RESYNC ack. It turns out that for the do-while loop we only need
   5218	 * to pull back qpriv->r_tid_ack, not the segment
   5219	 * indices/counters. The scheme works even if the previous request
   5220	 * 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 done
   5236	 * 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 pointer
   5245		 * into the flow array is used. The distance between it
   5246		 * and the clear_tail is the number of flows that are
   5247		 * 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 being
   5258		 * received. So, when sending an ACK, the previous
   5259		 * 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 and
   5283	 * req could be pointing at the previous ack queue entry
   5284	 */
   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 RDMA
   5293		 * requests. Therefore, we NAK with the req->acked_tail
   5294		 * segment for the request at qpriv->r_tid_ack (same at
   5295		 * this point as the req->clear_tail segment for the
   5296		 * 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 resetting
   5323	 * RVT_S_RESP_PENDING
   5324	 */
   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 and
   5392			 * 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 machine
   5435 * @qp: the QP
   5436 *
   5437 * This schedules qp progress on the TID RDMA state machine. Caller
   5438 * should hold the s_lock.
   5439 * Unlike hfi1_schedule_send(), this cannot use hfi1_send_ok() because
   5440 * the two state machines can step on each other with respect to the
   5441 * RVT_S_BUSY flag.
   5442 * Therefore, a modified test is used.
   5443 * @return true if the second leg is scheduled;
   5444 *  false if the second leg is not scheduled.
   5445 */
   5446bool hfi1_schedule_tid_send(struct rvt_qp *qp)
   5447{
   5448	lockdep_assert_held(&qp->s_lock);
   5449	if (hfi1_send_tid_ok(qp)) {
   5450		/*
   5451		 * The following call returns true if the qp is not on the
   5452		 * queue and false if the qp is already on the queue before
   5453		 * this call. Either way, the qp will be on the queue when the
   5454		 * call returns.
   5455		 */
   5456		_hfi1_schedule_tid_send(qp);
   5457		return true;
   5458	}
   5459	if (qp->s_flags & HFI1_S_ANY_WAIT_IO)
   5460		iowait_set_flag(&((struct hfi1_qp_priv *)qp->priv)->s_iowait,
   5461				IOWAIT_PENDING_TID);
   5462	return false;
   5463}
   5464
   5465bool hfi1_tid_rdma_ack_interlock(struct rvt_qp *qp, struct rvt_ack_entry *e)
   5466{
   5467	struct rvt_ack_entry *prev;
   5468	struct tid_rdma_request *req;
   5469	struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);
   5470	struct hfi1_qp_priv *priv = qp->priv;
   5471	u32 s_prev;
   5472
   5473	s_prev = qp->s_tail_ack_queue == 0 ? rvt_size_atomic(&dev->rdi) :
   5474		(qp->s_tail_ack_queue - 1);
   5475	prev = &qp->s_ack_queue[s_prev];
   5476
   5477	if ((e->opcode == TID_OP(READ_REQ) ||
   5478	     e->opcode == OP(RDMA_READ_REQUEST)) &&
   5479	    prev->opcode == TID_OP(WRITE_REQ)) {
   5480		req = ack_to_tid_req(prev);
   5481		if (req->ack_seg != req->total_segs) {
   5482			priv->s_flags |= HFI1_R_TID_WAIT_INTERLCK;
   5483			return true;
   5484		}
   5485	}
   5486	return false;
   5487}
   5488
   5489static u32 read_r_next_psn(struct hfi1_devdata *dd, u8 ctxt, u8 fidx)
   5490{
   5491	u64 reg;
   5492
   5493	/*
   5494	 * The only sane way to get the amount of
   5495	 * progress is to read the HW flow state.
   5496	 */
   5497	reg = read_uctxt_csr(dd, ctxt, RCV_TID_FLOW_TABLE + (8 * fidx));
   5498	return mask_psn(reg);
   5499}
   5500
   5501static void tid_rdma_rcv_err(struct hfi1_packet *packet,
   5502			     struct ib_other_headers *ohdr,
   5503			     struct rvt_qp *qp, u32 psn, int diff, bool fecn)
   5504{
   5505	unsigned long flags;
   5506
   5507	tid_rdma_rcv_error(packet, ohdr, qp, psn, diff);
   5508	if (fecn) {
   5509		spin_lock_irqsave(&qp->s_lock, flags);
   5510		qp->s_flags |= RVT_S_ECN;
   5511		spin_unlock_irqrestore(&qp->s_lock, flags);
   5512	}
   5513}
   5514
   5515static void update_r_next_psn_fecn(struct hfi1_packet *packet,
   5516				   struct hfi1_qp_priv *priv,
   5517				   struct hfi1_ctxtdata *rcd,
   5518				   struct tid_rdma_flow *flow,
   5519				   bool fecn)
   5520{
   5521	/*
   5522	 * If a start/middle packet is delivered here due to
   5523	 * RSM rule and FECN, we need to update the r_next_psn.
   5524	 */
   5525	if (fecn && packet->etype == RHF_RCV_TYPE_EAGER &&
   5526	    !(priv->s_flags & HFI1_R_TID_SW_PSN)) {
   5527		struct hfi1_devdata *dd = rcd->dd;
   5528
   5529		flow->flow_state.r_next_psn =
   5530			read_r_next_psn(dd, rcd->ctxt, flow->idx);
   5531	}
   5532}