xref: /openbmc/linux/drivers/infiniband/hw/qib/qib_rc.c (revision f3a8b664)
1 /*
2  * Copyright (c) 2006, 2007, 2008, 2009 QLogic Corporation. All rights reserved.
3  * Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses.  You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, available from the file
8  * COPYING in the main directory of this source tree, or the
9  * OpenIB.org BSD license below:
10  *
11  *     Redistribution and use in source and binary forms, with or
12  *     without modification, are permitted provided that the following
13  *     conditions are met:
14  *
15  *      - Redistributions of source code must retain the above
16  *        copyright notice, this list of conditions and the following
17  *        disclaimer.
18  *
19  *      - Redistributions in binary form must reproduce the above
20  *        copyright notice, this list of conditions and the following
21  *        disclaimer in the documentation and/or other materials
22  *        provided with the distribution.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31  * SOFTWARE.
32  */
33 
34 #include <linux/io.h>
35 
36 #include "qib.h"
37 
38 /* cut down ridiculously long IB macro names */
39 #define OP(x) IB_OPCODE_RC_##x
40 
41 static void rc_timeout(unsigned long arg);
42 
43 static u32 restart_sge(struct rvt_sge_state *ss, struct rvt_swqe *wqe,
44 		       u32 psn, u32 pmtu)
45 {
46 	u32 len;
47 
48 	len = ((psn - wqe->psn) & QIB_PSN_MASK) * pmtu;
49 	ss->sge = wqe->sg_list[0];
50 	ss->sg_list = wqe->sg_list + 1;
51 	ss->num_sge = wqe->wr.num_sge;
52 	ss->total_len = wqe->length;
53 	qib_skip_sge(ss, len, 0);
54 	return wqe->length - len;
55 }
56 
57 static void start_timer(struct rvt_qp *qp)
58 {
59 	qp->s_flags |= RVT_S_TIMER;
60 	qp->s_timer.function = rc_timeout;
61 	/* 4.096 usec. * (1 << qp->timeout) */
62 	qp->s_timer.expires = jiffies + qp->timeout_jiffies;
63 	add_timer(&qp->s_timer);
64 }
65 
66 /**
67  * qib_make_rc_ack - construct a response packet (ACK, NAK, or RDMA read)
68  * @dev: the device for this QP
69  * @qp: a pointer to the QP
70  * @ohdr: a pointer to the IB header being constructed
71  * @pmtu: the path MTU
72  *
73  * Return 1 if constructed; otherwise, return 0.
74  * Note that we are in the responder's side of the QP context.
75  * Note the QP s_lock must be held.
76  */
77 static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp,
78 			   struct ib_other_headers *ohdr, u32 pmtu)
79 {
80 	struct rvt_ack_entry *e;
81 	u32 hwords;
82 	u32 len;
83 	u32 bth0;
84 	u32 bth2;
85 
86 	/* Don't send an ACK if we aren't supposed to. */
87 	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK))
88 		goto bail;
89 
90 	/* header size in 32-bit words LRH+BTH = (8+12)/4. */
91 	hwords = 5;
92 
93 	switch (qp->s_ack_state) {
94 	case OP(RDMA_READ_RESPONSE_LAST):
95 	case OP(RDMA_READ_RESPONSE_ONLY):
96 		e = &qp->s_ack_queue[qp->s_tail_ack_queue];
97 		if (e->rdma_sge.mr) {
98 			rvt_put_mr(e->rdma_sge.mr);
99 			e->rdma_sge.mr = NULL;
100 		}
101 		/* FALLTHROUGH */
102 	case OP(ATOMIC_ACKNOWLEDGE):
103 		/*
104 		 * We can increment the tail pointer now that the last
105 		 * response has been sent instead of only being
106 		 * constructed.
107 		 */
108 		if (++qp->s_tail_ack_queue > QIB_MAX_RDMA_ATOMIC)
109 			qp->s_tail_ack_queue = 0;
110 		/* FALLTHROUGH */
111 	case OP(SEND_ONLY):
112 	case OP(ACKNOWLEDGE):
113 		/* Check for no next entry in the queue. */
114 		if (qp->r_head_ack_queue == qp->s_tail_ack_queue) {
115 			if (qp->s_flags & RVT_S_ACK_PENDING)
116 				goto normal;
117 			goto bail;
118 		}
119 
120 		e = &qp->s_ack_queue[qp->s_tail_ack_queue];
121 		if (e->opcode == OP(RDMA_READ_REQUEST)) {
122 			/*
123 			 * If a RDMA read response is being resent and
124 			 * we haven't seen the duplicate request yet,
125 			 * then stop sending the remaining responses the
126 			 * responder has seen until the requester resends it.
127 			 */
128 			len = e->rdma_sge.sge_length;
129 			if (len && !e->rdma_sge.mr) {
130 				qp->s_tail_ack_queue = qp->r_head_ack_queue;
131 				goto bail;
132 			}
133 			/* Copy SGE state in case we need to resend */
134 			qp->s_rdma_mr = e->rdma_sge.mr;
135 			if (qp->s_rdma_mr)
136 				rvt_get_mr(qp->s_rdma_mr);
137 			qp->s_ack_rdma_sge.sge = e->rdma_sge;
138 			qp->s_ack_rdma_sge.num_sge = 1;
139 			qp->s_cur_sge = &qp->s_ack_rdma_sge;
140 			if (len > pmtu) {
141 				len = pmtu;
142 				qp->s_ack_state = OP(RDMA_READ_RESPONSE_FIRST);
143 			} else {
144 				qp->s_ack_state = OP(RDMA_READ_RESPONSE_ONLY);
145 				e->sent = 1;
146 			}
147 			ohdr->u.aeth = qib_compute_aeth(qp);
148 			hwords++;
149 			qp->s_ack_rdma_psn = e->psn;
150 			bth2 = qp->s_ack_rdma_psn++ & QIB_PSN_MASK;
151 		} else {
152 			/* COMPARE_SWAP or FETCH_ADD */
153 			qp->s_cur_sge = NULL;
154 			len = 0;
155 			qp->s_ack_state = OP(ATOMIC_ACKNOWLEDGE);
156 			ohdr->u.at.aeth = qib_compute_aeth(qp);
157 			ib_u64_put(e->atomic_data, &ohdr->u.at.atomic_ack_eth);
158 			hwords += sizeof(ohdr->u.at) / sizeof(u32);
159 			bth2 = e->psn & QIB_PSN_MASK;
160 			e->sent = 1;
161 		}
162 		bth0 = qp->s_ack_state << 24;
163 		break;
164 
165 	case OP(RDMA_READ_RESPONSE_FIRST):
166 		qp->s_ack_state = OP(RDMA_READ_RESPONSE_MIDDLE);
167 		/* FALLTHROUGH */
168 	case OP(RDMA_READ_RESPONSE_MIDDLE):
169 		qp->s_cur_sge = &qp->s_ack_rdma_sge;
170 		qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr;
171 		if (qp->s_rdma_mr)
172 			rvt_get_mr(qp->s_rdma_mr);
173 		len = qp->s_ack_rdma_sge.sge.sge_length;
174 		if (len > pmtu)
175 			len = pmtu;
176 		else {
177 			ohdr->u.aeth = qib_compute_aeth(qp);
178 			hwords++;
179 			qp->s_ack_state = OP(RDMA_READ_RESPONSE_LAST);
180 			e = &qp->s_ack_queue[qp->s_tail_ack_queue];
181 			e->sent = 1;
182 		}
183 		bth0 = qp->s_ack_state << 24;
184 		bth2 = qp->s_ack_rdma_psn++ & QIB_PSN_MASK;
185 		break;
186 
187 	default:
188 normal:
189 		/*
190 		 * Send a regular ACK.
191 		 * Set the s_ack_state so we wait until after sending
192 		 * the ACK before setting s_ack_state to ACKNOWLEDGE
193 		 * (see above).
194 		 */
195 		qp->s_ack_state = OP(SEND_ONLY);
196 		qp->s_flags &= ~RVT_S_ACK_PENDING;
197 		qp->s_cur_sge = NULL;
198 		if (qp->s_nak_state)
199 			ohdr->u.aeth =
200 				cpu_to_be32((qp->r_msn & QIB_MSN_MASK) |
201 					    (qp->s_nak_state <<
202 					     QIB_AETH_CREDIT_SHIFT));
203 		else
204 			ohdr->u.aeth = qib_compute_aeth(qp);
205 		hwords++;
206 		len = 0;
207 		bth0 = OP(ACKNOWLEDGE) << 24;
208 		bth2 = qp->s_ack_psn & QIB_PSN_MASK;
209 	}
210 	qp->s_rdma_ack_cnt++;
211 	qp->s_hdrwords = hwords;
212 	qp->s_cur_size = len;
213 	qib_make_ruc_header(qp, ohdr, bth0, bth2);
214 	return 1;
215 
216 bail:
217 	qp->s_ack_state = OP(ACKNOWLEDGE);
218 	qp->s_flags &= ~(RVT_S_RESP_PENDING | RVT_S_ACK_PENDING);
219 	return 0;
220 }
221 
222 /**
223  * qib_make_rc_req - construct a request packet (SEND, RDMA r/w, ATOMIC)
224  * @qp: a pointer to the QP
225  *
226  * Assumes the s_lock is held.
227  *
228  * Return 1 if constructed; otherwise, return 0.
229  */
230 int qib_make_rc_req(struct rvt_qp *qp, unsigned long *flags)
231 {
232 	struct qib_qp_priv *priv = qp->priv;
233 	struct qib_ibdev *dev = to_idev(qp->ibqp.device);
234 	struct ib_other_headers *ohdr;
235 	struct rvt_sge_state *ss;
236 	struct rvt_swqe *wqe;
237 	u32 hwords;
238 	u32 len;
239 	u32 bth0;
240 	u32 bth2;
241 	u32 pmtu = qp->pmtu;
242 	char newreq;
243 	int ret = 0;
244 	int delta;
245 
246 	ohdr = &priv->s_hdr->u.oth;
247 	if (qp->remote_ah_attr.ah_flags & IB_AH_GRH)
248 		ohdr = &priv->s_hdr->u.l.oth;
249 
250 	/* Sending responses has higher priority over sending requests. */
251 	if ((qp->s_flags & RVT_S_RESP_PENDING) &&
252 	    qib_make_rc_ack(dev, qp, ohdr, pmtu))
253 		goto done;
254 
255 	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) {
256 		if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
257 			goto bail;
258 		/* We are in the error state, flush the work request. */
259 		smp_read_barrier_depends(); /* see post_one_send() */
260 		if (qp->s_last == ACCESS_ONCE(qp->s_head))
261 			goto bail;
262 		/* If DMAs are in progress, we can't flush immediately. */
263 		if (atomic_read(&priv->s_dma_busy)) {
264 			qp->s_flags |= RVT_S_WAIT_DMA;
265 			goto bail;
266 		}
267 		wqe = rvt_get_swqe_ptr(qp, qp->s_last);
268 		qib_send_complete(qp, wqe, qp->s_last != qp->s_acked ?
269 			IB_WC_SUCCESS : IB_WC_WR_FLUSH_ERR);
270 		/* will get called again */
271 		goto done;
272 	}
273 
274 	if (qp->s_flags & (RVT_S_WAIT_RNR | RVT_S_WAIT_ACK))
275 		goto bail;
276 
277 	if (qib_cmp24(qp->s_psn, qp->s_sending_hpsn) <= 0) {
278 		if (qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0) {
279 			qp->s_flags |= RVT_S_WAIT_PSN;
280 			goto bail;
281 		}
282 		qp->s_sending_psn = qp->s_psn;
283 		qp->s_sending_hpsn = qp->s_psn - 1;
284 	}
285 
286 	/* header size in 32-bit words LRH+BTH = (8+12)/4. */
287 	hwords = 5;
288 	bth0 = 0;
289 
290 	/* Send a request. */
291 	wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
292 	switch (qp->s_state) {
293 	default:
294 		if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_NEXT_SEND_OK))
295 			goto bail;
296 		/*
297 		 * Resend an old request or start a new one.
298 		 *
299 		 * We keep track of the current SWQE so that
300 		 * we don't reset the "furthest progress" state
301 		 * if we need to back up.
302 		 */
303 		newreq = 0;
304 		if (qp->s_cur == qp->s_tail) {
305 			/* Check if send work queue is empty. */
306 			if (qp->s_tail == qp->s_head)
307 				goto bail;
308 			/*
309 			 * If a fence is requested, wait for previous
310 			 * RDMA read and atomic operations to finish.
311 			 */
312 			if ((wqe->wr.send_flags & IB_SEND_FENCE) &&
313 			    qp->s_num_rd_atomic) {
314 				qp->s_flags |= RVT_S_WAIT_FENCE;
315 				goto bail;
316 			}
317 			newreq = 1;
318 			qp->s_psn = wqe->psn;
319 		}
320 		/*
321 		 * Note that we have to be careful not to modify the
322 		 * original work request since we may need to resend
323 		 * it.
324 		 */
325 		len = wqe->length;
326 		ss = &qp->s_sge;
327 		bth2 = qp->s_psn & QIB_PSN_MASK;
328 		switch (wqe->wr.opcode) {
329 		case IB_WR_SEND:
330 		case IB_WR_SEND_WITH_IMM:
331 			/* If no credit, return. */
332 			if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT) &&
333 			    qib_cmp24(wqe->ssn, qp->s_lsn + 1) > 0) {
334 				qp->s_flags |= RVT_S_WAIT_SSN_CREDIT;
335 				goto bail;
336 			}
337 			if (len > pmtu) {
338 				qp->s_state = OP(SEND_FIRST);
339 				len = pmtu;
340 				break;
341 			}
342 			if (wqe->wr.opcode == IB_WR_SEND)
343 				qp->s_state = OP(SEND_ONLY);
344 			else {
345 				qp->s_state = OP(SEND_ONLY_WITH_IMMEDIATE);
346 				/* Immediate data comes after the BTH */
347 				ohdr->u.imm_data = wqe->wr.ex.imm_data;
348 				hwords += 1;
349 			}
350 			if (wqe->wr.send_flags & IB_SEND_SOLICITED)
351 				bth0 |= IB_BTH_SOLICITED;
352 			bth2 |= IB_BTH_REQ_ACK;
353 			if (++qp->s_cur == qp->s_size)
354 				qp->s_cur = 0;
355 			break;
356 
357 		case IB_WR_RDMA_WRITE:
358 			if (newreq && !(qp->s_flags & RVT_S_UNLIMITED_CREDIT))
359 				qp->s_lsn++;
360 			/* FALLTHROUGH */
361 		case IB_WR_RDMA_WRITE_WITH_IMM:
362 			/* If no credit, return. */
363 			if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT) &&
364 			    qib_cmp24(wqe->ssn, qp->s_lsn + 1) > 0) {
365 				qp->s_flags |= RVT_S_WAIT_SSN_CREDIT;
366 				goto bail;
367 			}
368 
369 			ohdr->u.rc.reth.vaddr =
370 				cpu_to_be64(wqe->rdma_wr.remote_addr);
371 			ohdr->u.rc.reth.rkey =
372 				cpu_to_be32(wqe->rdma_wr.rkey);
373 			ohdr->u.rc.reth.length = cpu_to_be32(len);
374 			hwords += sizeof(struct ib_reth) / sizeof(u32);
375 			if (len > pmtu) {
376 				qp->s_state = OP(RDMA_WRITE_FIRST);
377 				len = pmtu;
378 				break;
379 			}
380 			if (wqe->rdma_wr.wr.opcode == IB_WR_RDMA_WRITE)
381 				qp->s_state = OP(RDMA_WRITE_ONLY);
382 			else {
383 				qp->s_state = OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE);
384 				/* Immediate data comes after RETH */
385 				ohdr->u.rc.imm_data =
386 					wqe->rdma_wr.wr.ex.imm_data;
387 				hwords += 1;
388 				if (wqe->rdma_wr.wr.send_flags & IB_SEND_SOLICITED)
389 					bth0 |= IB_BTH_SOLICITED;
390 			}
391 			bth2 |= IB_BTH_REQ_ACK;
392 			if (++qp->s_cur == qp->s_size)
393 				qp->s_cur = 0;
394 			break;
395 
396 		case IB_WR_RDMA_READ:
397 			/*
398 			 * Don't allow more operations to be started
399 			 * than the QP limits allow.
400 			 */
401 			if (newreq) {
402 				if (qp->s_num_rd_atomic >=
403 				    qp->s_max_rd_atomic) {
404 					qp->s_flags |= RVT_S_WAIT_RDMAR;
405 					goto bail;
406 				}
407 				qp->s_num_rd_atomic++;
408 				if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT))
409 					qp->s_lsn++;
410 			}
411 
412 			ohdr->u.rc.reth.vaddr =
413 				cpu_to_be64(wqe->rdma_wr.remote_addr);
414 			ohdr->u.rc.reth.rkey =
415 				cpu_to_be32(wqe->rdma_wr.rkey);
416 			ohdr->u.rc.reth.length = cpu_to_be32(len);
417 			qp->s_state = OP(RDMA_READ_REQUEST);
418 			hwords += sizeof(ohdr->u.rc.reth) / sizeof(u32);
419 			ss = NULL;
420 			len = 0;
421 			bth2 |= IB_BTH_REQ_ACK;
422 			if (++qp->s_cur == qp->s_size)
423 				qp->s_cur = 0;
424 			break;
425 
426 		case IB_WR_ATOMIC_CMP_AND_SWP:
427 		case IB_WR_ATOMIC_FETCH_AND_ADD:
428 			/*
429 			 * Don't allow more operations to be started
430 			 * than the QP limits allow.
431 			 */
432 			if (newreq) {
433 				if (qp->s_num_rd_atomic >=
434 				    qp->s_max_rd_atomic) {
435 					qp->s_flags |= RVT_S_WAIT_RDMAR;
436 					goto bail;
437 				}
438 				qp->s_num_rd_atomic++;
439 				if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT))
440 					qp->s_lsn++;
441 			}
442 			if (wqe->atomic_wr.wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP) {
443 				qp->s_state = OP(COMPARE_SWAP);
444 				put_ib_ateth_swap(wqe->atomic_wr.swap,
445 						  &ohdr->u.atomic_eth);
446 				put_ib_ateth_swap(wqe->atomic_wr.compare_add,
447 						  &ohdr->u.atomic_eth);
448 			} else {
449 				qp->s_state = OP(FETCH_ADD);
450 				put_ib_ateth_swap(wqe->atomic_wr.compare_add,
451 						  &ohdr->u.atomic_eth);
452 				put_ib_ateth_swap(0, &ohdr->u.atomic_eth);
453 			}
454 			put_ib_ateth_vaddr(wqe->atomic_wr.remote_addr,
455 					   &ohdr->u.atomic_eth);
456 			ohdr->u.atomic_eth.rkey = cpu_to_be32(
457 				wqe->atomic_wr.rkey);
458 			hwords += sizeof(struct ib_atomic_eth) / sizeof(u32);
459 			ss = NULL;
460 			len = 0;
461 			bth2 |= IB_BTH_REQ_ACK;
462 			if (++qp->s_cur == qp->s_size)
463 				qp->s_cur = 0;
464 			break;
465 
466 		default:
467 			goto bail;
468 		}
469 		qp->s_sge.sge = wqe->sg_list[0];
470 		qp->s_sge.sg_list = wqe->sg_list + 1;
471 		qp->s_sge.num_sge = wqe->wr.num_sge;
472 		qp->s_sge.total_len = wqe->length;
473 		qp->s_len = wqe->length;
474 		if (newreq) {
475 			qp->s_tail++;
476 			if (qp->s_tail >= qp->s_size)
477 				qp->s_tail = 0;
478 		}
479 		if (wqe->wr.opcode == IB_WR_RDMA_READ)
480 			qp->s_psn = wqe->lpsn + 1;
481 		else
482 			qp->s_psn++;
483 		break;
484 
485 	case OP(RDMA_READ_RESPONSE_FIRST):
486 		/*
487 		 * qp->s_state is normally set to the opcode of the
488 		 * last packet constructed for new requests and therefore
489 		 * is never set to RDMA read response.
490 		 * RDMA_READ_RESPONSE_FIRST is used by the ACK processing
491 		 * thread to indicate a SEND needs to be restarted from an
492 		 * earlier PSN without interferring with the sending thread.
493 		 * See qib_restart_rc().
494 		 */
495 		qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu);
496 		/* FALLTHROUGH */
497 	case OP(SEND_FIRST):
498 		qp->s_state = OP(SEND_MIDDLE);
499 		/* FALLTHROUGH */
500 	case OP(SEND_MIDDLE):
501 		bth2 = qp->s_psn++ & QIB_PSN_MASK;
502 		ss = &qp->s_sge;
503 		len = qp->s_len;
504 		if (len > pmtu) {
505 			len = pmtu;
506 			break;
507 		}
508 		if (wqe->wr.opcode == IB_WR_SEND)
509 			qp->s_state = OP(SEND_LAST);
510 		else {
511 			qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE);
512 			/* Immediate data comes after the BTH */
513 			ohdr->u.imm_data = wqe->wr.ex.imm_data;
514 			hwords += 1;
515 		}
516 		if (wqe->wr.send_flags & IB_SEND_SOLICITED)
517 			bth0 |= IB_BTH_SOLICITED;
518 		bth2 |= IB_BTH_REQ_ACK;
519 		qp->s_cur++;
520 		if (qp->s_cur >= qp->s_size)
521 			qp->s_cur = 0;
522 		break;
523 
524 	case OP(RDMA_READ_RESPONSE_LAST):
525 		/*
526 		 * qp->s_state is normally set to the opcode of the
527 		 * last packet constructed for new requests and therefore
528 		 * is never set to RDMA read response.
529 		 * RDMA_READ_RESPONSE_LAST is used by the ACK processing
530 		 * thread to indicate a RDMA write needs to be restarted from
531 		 * an earlier PSN without interferring with the sending thread.
532 		 * See qib_restart_rc().
533 		 */
534 		qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu);
535 		/* FALLTHROUGH */
536 	case OP(RDMA_WRITE_FIRST):
537 		qp->s_state = OP(RDMA_WRITE_MIDDLE);
538 		/* FALLTHROUGH */
539 	case OP(RDMA_WRITE_MIDDLE):
540 		bth2 = qp->s_psn++ & QIB_PSN_MASK;
541 		ss = &qp->s_sge;
542 		len = qp->s_len;
543 		if (len > pmtu) {
544 			len = pmtu;
545 			break;
546 		}
547 		if (wqe->wr.opcode == IB_WR_RDMA_WRITE)
548 			qp->s_state = OP(RDMA_WRITE_LAST);
549 		else {
550 			qp->s_state = OP(RDMA_WRITE_LAST_WITH_IMMEDIATE);
551 			/* Immediate data comes after the BTH */
552 			ohdr->u.imm_data = wqe->wr.ex.imm_data;
553 			hwords += 1;
554 			if (wqe->wr.send_flags & IB_SEND_SOLICITED)
555 				bth0 |= IB_BTH_SOLICITED;
556 		}
557 		bth2 |= IB_BTH_REQ_ACK;
558 		qp->s_cur++;
559 		if (qp->s_cur >= qp->s_size)
560 			qp->s_cur = 0;
561 		break;
562 
563 	case OP(RDMA_READ_RESPONSE_MIDDLE):
564 		/*
565 		 * qp->s_state is normally set to the opcode of the
566 		 * last packet constructed for new requests and therefore
567 		 * is never set to RDMA read response.
568 		 * RDMA_READ_RESPONSE_MIDDLE is used by the ACK processing
569 		 * thread to indicate a RDMA read needs to be restarted from
570 		 * an earlier PSN without interferring with the sending thread.
571 		 * See qib_restart_rc().
572 		 */
573 		len = ((qp->s_psn - wqe->psn) & QIB_PSN_MASK) * pmtu;
574 		ohdr->u.rc.reth.vaddr =
575 			cpu_to_be64(wqe->rdma_wr.remote_addr + len);
576 		ohdr->u.rc.reth.rkey =
577 			cpu_to_be32(wqe->rdma_wr.rkey);
578 		ohdr->u.rc.reth.length = cpu_to_be32(wqe->length - len);
579 		qp->s_state = OP(RDMA_READ_REQUEST);
580 		hwords += sizeof(ohdr->u.rc.reth) / sizeof(u32);
581 		bth2 = (qp->s_psn & QIB_PSN_MASK) | IB_BTH_REQ_ACK;
582 		qp->s_psn = wqe->lpsn + 1;
583 		ss = NULL;
584 		len = 0;
585 		qp->s_cur++;
586 		if (qp->s_cur == qp->s_size)
587 			qp->s_cur = 0;
588 		break;
589 	}
590 	qp->s_sending_hpsn = bth2;
591 	delta = (((int) bth2 - (int) wqe->psn) << 8) >> 8;
592 	if (delta && delta % QIB_PSN_CREDIT == 0)
593 		bth2 |= IB_BTH_REQ_ACK;
594 	if (qp->s_flags & RVT_S_SEND_ONE) {
595 		qp->s_flags &= ~RVT_S_SEND_ONE;
596 		qp->s_flags |= RVT_S_WAIT_ACK;
597 		bth2 |= IB_BTH_REQ_ACK;
598 	}
599 	qp->s_len -= len;
600 	qp->s_hdrwords = hwords;
601 	qp->s_cur_sge = ss;
602 	qp->s_cur_size = len;
603 	qib_make_ruc_header(qp, ohdr, bth0 | (qp->s_state << 24), bth2);
604 done:
605 	return 1;
606 bail:
607 	qp->s_flags &= ~RVT_S_BUSY;
608 	return ret;
609 }
610 
611 /**
612  * qib_send_rc_ack - Construct an ACK packet and send it
613  * @qp: a pointer to the QP
614  *
615  * This is called from qib_rc_rcv() and qib_kreceive().
616  * Note that RDMA reads and atomics are handled in the
617  * send side QP state and tasklet.
618  */
619 void qib_send_rc_ack(struct rvt_qp *qp)
620 {
621 	struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
622 	struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
623 	struct qib_pportdata *ppd = ppd_from_ibp(ibp);
624 	u64 pbc;
625 	u16 lrh0;
626 	u32 bth0;
627 	u32 hwords;
628 	u32 pbufn;
629 	u32 __iomem *piobuf;
630 	struct ib_header hdr;
631 	struct ib_other_headers *ohdr;
632 	u32 control;
633 	unsigned long flags;
634 
635 	spin_lock_irqsave(&qp->s_lock, flags);
636 
637 	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK))
638 		goto unlock;
639 
640 	/* Don't send ACK or NAK if a RDMA read or atomic is pending. */
641 	if ((qp->s_flags & RVT_S_RESP_PENDING) || qp->s_rdma_ack_cnt)
642 		goto queue_ack;
643 
644 	/* Construct the header with s_lock held so APM doesn't change it. */
645 	ohdr = &hdr.u.oth;
646 	lrh0 = QIB_LRH_BTH;
647 	/* header size in 32-bit words LRH+BTH+AETH = (8+12+4)/4. */
648 	hwords = 6;
649 	if (unlikely(qp->remote_ah_attr.ah_flags & IB_AH_GRH)) {
650 		hwords += qib_make_grh(ibp, &hdr.u.l.grh,
651 				       &qp->remote_ah_attr.grh, hwords, 0);
652 		ohdr = &hdr.u.l.oth;
653 		lrh0 = QIB_LRH_GRH;
654 	}
655 	/* read pkey_index w/o lock (its atomic) */
656 	bth0 = qib_get_pkey(ibp, qp->s_pkey_index) | (OP(ACKNOWLEDGE) << 24);
657 	if (qp->s_mig_state == IB_MIG_MIGRATED)
658 		bth0 |= IB_BTH_MIG_REQ;
659 	if (qp->r_nak_state)
660 		ohdr->u.aeth = cpu_to_be32((qp->r_msn & QIB_MSN_MASK) |
661 					    (qp->r_nak_state <<
662 					     QIB_AETH_CREDIT_SHIFT));
663 	else
664 		ohdr->u.aeth = qib_compute_aeth(qp);
665 	lrh0 |= ibp->sl_to_vl[qp->remote_ah_attr.sl] << 12 |
666 		qp->remote_ah_attr.sl << 4;
667 	hdr.lrh[0] = cpu_to_be16(lrh0);
668 	hdr.lrh[1] = cpu_to_be16(qp->remote_ah_attr.dlid);
669 	hdr.lrh[2] = cpu_to_be16(hwords + SIZE_OF_CRC);
670 	hdr.lrh[3] = cpu_to_be16(ppd->lid | qp->remote_ah_attr.src_path_bits);
671 	ohdr->bth[0] = cpu_to_be32(bth0);
672 	ohdr->bth[1] = cpu_to_be32(qp->remote_qpn);
673 	ohdr->bth[2] = cpu_to_be32(qp->r_ack_psn & QIB_PSN_MASK);
674 
675 	spin_unlock_irqrestore(&qp->s_lock, flags);
676 
677 	/* Don't try to send ACKs if the link isn't ACTIVE */
678 	if (!(ppd->lflags & QIBL_LINKACTIVE))
679 		goto done;
680 
681 	control = dd->f_setpbc_control(ppd, hwords + SIZE_OF_CRC,
682 				       qp->s_srate, lrh0 >> 12);
683 	/* length is + 1 for the control dword */
684 	pbc = ((u64) control << 32) | (hwords + 1);
685 
686 	piobuf = dd->f_getsendbuf(ppd, pbc, &pbufn);
687 	if (!piobuf) {
688 		/*
689 		 * We are out of PIO buffers at the moment.
690 		 * Pass responsibility for sending the ACK to the
691 		 * send tasklet so that when a PIO buffer becomes
692 		 * available, the ACK is sent ahead of other outgoing
693 		 * packets.
694 		 */
695 		spin_lock_irqsave(&qp->s_lock, flags);
696 		goto queue_ack;
697 	}
698 
699 	/*
700 	 * Write the pbc.
701 	 * We have to flush after the PBC for correctness
702 	 * on some cpus or WC buffer can be written out of order.
703 	 */
704 	writeq(pbc, piobuf);
705 
706 	if (dd->flags & QIB_PIO_FLUSH_WC) {
707 		u32 *hdrp = (u32 *) &hdr;
708 
709 		qib_flush_wc();
710 		qib_pio_copy(piobuf + 2, hdrp, hwords - 1);
711 		qib_flush_wc();
712 		__raw_writel(hdrp[hwords - 1], piobuf + hwords + 1);
713 	} else
714 		qib_pio_copy(piobuf + 2, (u32 *) &hdr, hwords);
715 
716 	if (dd->flags & QIB_USE_SPCL_TRIG) {
717 		u32 spcl_off = (pbufn >= dd->piobcnt2k) ? 2047 : 1023;
718 
719 		qib_flush_wc();
720 		__raw_writel(0xaebecede, piobuf + spcl_off);
721 	}
722 
723 	qib_flush_wc();
724 	qib_sendbuf_done(dd, pbufn);
725 
726 	this_cpu_inc(ibp->pmastats->n_unicast_xmit);
727 	goto done;
728 
729 queue_ack:
730 	if (ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK) {
731 		this_cpu_inc(*ibp->rvp.rc_qacks);
732 		qp->s_flags |= RVT_S_ACK_PENDING | RVT_S_RESP_PENDING;
733 		qp->s_nak_state = qp->r_nak_state;
734 		qp->s_ack_psn = qp->r_ack_psn;
735 
736 		/* Schedule the send tasklet. */
737 		qib_schedule_send(qp);
738 	}
739 unlock:
740 	spin_unlock_irqrestore(&qp->s_lock, flags);
741 done:
742 	return;
743 }
744 
745 /**
746  * reset_psn - reset the QP state to send starting from PSN
747  * @qp: the QP
748  * @psn: the packet sequence number to restart at
749  *
750  * This is called from qib_rc_rcv() to process an incoming RC ACK
751  * for the given QP.
752  * Called at interrupt level with the QP s_lock held.
753  */
754 static void reset_psn(struct rvt_qp *qp, u32 psn)
755 {
756 	u32 n = qp->s_acked;
757 	struct rvt_swqe *wqe = rvt_get_swqe_ptr(qp, n);
758 	u32 opcode;
759 
760 	qp->s_cur = n;
761 
762 	/*
763 	 * If we are starting the request from the beginning,
764 	 * let the normal send code handle initialization.
765 	 */
766 	if (qib_cmp24(psn, wqe->psn) <= 0) {
767 		qp->s_state = OP(SEND_LAST);
768 		goto done;
769 	}
770 
771 	/* Find the work request opcode corresponding to the given PSN. */
772 	opcode = wqe->wr.opcode;
773 	for (;;) {
774 		int diff;
775 
776 		if (++n == qp->s_size)
777 			n = 0;
778 		if (n == qp->s_tail)
779 			break;
780 		wqe = rvt_get_swqe_ptr(qp, n);
781 		diff = qib_cmp24(psn, wqe->psn);
782 		if (diff < 0)
783 			break;
784 		qp->s_cur = n;
785 		/*
786 		 * If we are starting the request from the beginning,
787 		 * let the normal send code handle initialization.
788 		 */
789 		if (diff == 0) {
790 			qp->s_state = OP(SEND_LAST);
791 			goto done;
792 		}
793 		opcode = wqe->wr.opcode;
794 	}
795 
796 	/*
797 	 * Set the state to restart in the middle of a request.
798 	 * Don't change the s_sge, s_cur_sge, or s_cur_size.
799 	 * See qib_make_rc_req().
800 	 */
801 	switch (opcode) {
802 	case IB_WR_SEND:
803 	case IB_WR_SEND_WITH_IMM:
804 		qp->s_state = OP(RDMA_READ_RESPONSE_FIRST);
805 		break;
806 
807 	case IB_WR_RDMA_WRITE:
808 	case IB_WR_RDMA_WRITE_WITH_IMM:
809 		qp->s_state = OP(RDMA_READ_RESPONSE_LAST);
810 		break;
811 
812 	case IB_WR_RDMA_READ:
813 		qp->s_state = OP(RDMA_READ_RESPONSE_MIDDLE);
814 		break;
815 
816 	default:
817 		/*
818 		 * This case shouldn't happen since its only
819 		 * one PSN per req.
820 		 */
821 		qp->s_state = OP(SEND_LAST);
822 	}
823 done:
824 	qp->s_psn = psn;
825 	/*
826 	 * Set RVT_S_WAIT_PSN as qib_rc_complete() may start the timer
827 	 * asynchronously before the send tasklet can get scheduled.
828 	 * Doing it in qib_make_rc_req() is too late.
829 	 */
830 	if ((qib_cmp24(qp->s_psn, qp->s_sending_hpsn) <= 0) &&
831 	    (qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0))
832 		qp->s_flags |= RVT_S_WAIT_PSN;
833 }
834 
835 /*
836  * Back up requester to resend the last un-ACKed request.
837  * The QP r_lock and s_lock should be held and interrupts disabled.
838  */
839 static void qib_restart_rc(struct rvt_qp *qp, u32 psn, int wait)
840 {
841 	struct rvt_swqe *wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
842 	struct qib_ibport *ibp;
843 
844 	if (qp->s_retry == 0) {
845 		if (qp->s_mig_state == IB_MIG_ARMED) {
846 			qib_migrate_qp(qp);
847 			qp->s_retry = qp->s_retry_cnt;
848 		} else if (qp->s_last == qp->s_acked) {
849 			qib_send_complete(qp, wqe, IB_WC_RETRY_EXC_ERR);
850 			rvt_error_qp(qp, IB_WC_WR_FLUSH_ERR);
851 			return;
852 		} else /* XXX need to handle delayed completion */
853 			return;
854 	} else
855 		qp->s_retry--;
856 
857 	ibp = to_iport(qp->ibqp.device, qp->port_num);
858 	if (wqe->wr.opcode == IB_WR_RDMA_READ)
859 		ibp->rvp.n_rc_resends++;
860 	else
861 		ibp->rvp.n_rc_resends += (qp->s_psn - psn) & QIB_PSN_MASK;
862 
863 	qp->s_flags &= ~(RVT_S_WAIT_FENCE | RVT_S_WAIT_RDMAR |
864 			 RVT_S_WAIT_SSN_CREDIT | RVT_S_WAIT_PSN |
865 			 RVT_S_WAIT_ACK);
866 	if (wait)
867 		qp->s_flags |= RVT_S_SEND_ONE;
868 	reset_psn(qp, psn);
869 }
870 
871 /*
872  * This is called from s_timer for missing responses.
873  */
874 static void rc_timeout(unsigned long arg)
875 {
876 	struct rvt_qp *qp = (struct rvt_qp *)arg;
877 	struct qib_ibport *ibp;
878 	unsigned long flags;
879 
880 	spin_lock_irqsave(&qp->r_lock, flags);
881 	spin_lock(&qp->s_lock);
882 	if (qp->s_flags & RVT_S_TIMER) {
883 		ibp = to_iport(qp->ibqp.device, qp->port_num);
884 		ibp->rvp.n_rc_timeouts++;
885 		qp->s_flags &= ~RVT_S_TIMER;
886 		del_timer(&qp->s_timer);
887 		qib_restart_rc(qp, qp->s_last_psn + 1, 1);
888 		qib_schedule_send(qp);
889 	}
890 	spin_unlock(&qp->s_lock);
891 	spin_unlock_irqrestore(&qp->r_lock, flags);
892 }
893 
894 /*
895  * This is called from s_timer for RNR timeouts.
896  */
897 void qib_rc_rnr_retry(unsigned long arg)
898 {
899 	struct rvt_qp *qp = (struct rvt_qp *)arg;
900 	unsigned long flags;
901 
902 	spin_lock_irqsave(&qp->s_lock, flags);
903 	if (qp->s_flags & RVT_S_WAIT_RNR) {
904 		qp->s_flags &= ~RVT_S_WAIT_RNR;
905 		del_timer(&qp->s_timer);
906 		qib_schedule_send(qp);
907 	}
908 	spin_unlock_irqrestore(&qp->s_lock, flags);
909 }
910 
911 /*
912  * Set qp->s_sending_psn to the next PSN after the given one.
913  * This would be psn+1 except when RDMA reads are present.
914  */
915 static void reset_sending_psn(struct rvt_qp *qp, u32 psn)
916 {
917 	struct rvt_swqe *wqe;
918 	u32 n = qp->s_last;
919 
920 	/* Find the work request corresponding to the given PSN. */
921 	for (;;) {
922 		wqe = rvt_get_swqe_ptr(qp, n);
923 		if (qib_cmp24(psn, wqe->lpsn) <= 0) {
924 			if (wqe->wr.opcode == IB_WR_RDMA_READ)
925 				qp->s_sending_psn = wqe->lpsn + 1;
926 			else
927 				qp->s_sending_psn = psn + 1;
928 			break;
929 		}
930 		if (++n == qp->s_size)
931 			n = 0;
932 		if (n == qp->s_tail)
933 			break;
934 	}
935 }
936 
937 /*
938  * This should be called with the QP s_lock held and interrupts disabled.
939  */
940 void qib_rc_send_complete(struct rvt_qp *qp, struct ib_header *hdr)
941 {
942 	struct ib_other_headers *ohdr;
943 	struct rvt_swqe *wqe;
944 	struct ib_wc wc;
945 	unsigned i;
946 	u32 opcode;
947 	u32 psn;
948 
949 	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_OR_FLUSH_SEND))
950 		return;
951 
952 	/* Find out where the BTH is */
953 	if ((be16_to_cpu(hdr->lrh[0]) & 3) == QIB_LRH_BTH)
954 		ohdr = &hdr->u.oth;
955 	else
956 		ohdr = &hdr->u.l.oth;
957 
958 	opcode = be32_to_cpu(ohdr->bth[0]) >> 24;
959 	if (opcode >= OP(RDMA_READ_RESPONSE_FIRST) &&
960 	    opcode <= OP(ATOMIC_ACKNOWLEDGE)) {
961 		WARN_ON(!qp->s_rdma_ack_cnt);
962 		qp->s_rdma_ack_cnt--;
963 		return;
964 	}
965 
966 	psn = be32_to_cpu(ohdr->bth[2]);
967 	reset_sending_psn(qp, psn);
968 
969 	/*
970 	 * Start timer after a packet requesting an ACK has been sent and
971 	 * there are still requests that haven't been acked.
972 	 */
973 	if ((psn & IB_BTH_REQ_ACK) && qp->s_acked != qp->s_tail &&
974 	    !(qp->s_flags & (RVT_S_TIMER | RVT_S_WAIT_RNR | RVT_S_WAIT_PSN)) &&
975 	    (ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK))
976 		start_timer(qp);
977 
978 	while (qp->s_last != qp->s_acked) {
979 		u32 s_last;
980 
981 		wqe = rvt_get_swqe_ptr(qp, qp->s_last);
982 		if (qib_cmp24(wqe->lpsn, qp->s_sending_psn) >= 0 &&
983 		    qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
984 			break;
985 		s_last = qp->s_last;
986 		if (++s_last >= qp->s_size)
987 			s_last = 0;
988 		qp->s_last = s_last;
989 		/* see post_send() */
990 		barrier();
991 		for (i = 0; i < wqe->wr.num_sge; i++) {
992 			struct rvt_sge *sge = &wqe->sg_list[i];
993 
994 			rvt_put_mr(sge->mr);
995 		}
996 		/* Post a send completion queue entry if requested. */
997 		if (!(qp->s_flags & RVT_S_SIGNAL_REQ_WR) ||
998 		    (wqe->wr.send_flags & IB_SEND_SIGNALED)) {
999 			memset(&wc, 0, sizeof(wc));
1000 			wc.wr_id = wqe->wr.wr_id;
1001 			wc.status = IB_WC_SUCCESS;
1002 			wc.opcode = ib_qib_wc_opcode[wqe->wr.opcode];
1003 			wc.byte_len = wqe->length;
1004 			wc.qp = &qp->ibqp;
1005 			rvt_cq_enter(ibcq_to_rvtcq(qp->ibqp.send_cq), &wc, 0);
1006 		}
1007 	}
1008 	/*
1009 	 * If we were waiting for sends to complete before resending,
1010 	 * and they are now complete, restart sending.
1011 	 */
1012 	if (qp->s_flags & RVT_S_WAIT_PSN &&
1013 	    qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) > 0) {
1014 		qp->s_flags &= ~RVT_S_WAIT_PSN;
1015 		qp->s_sending_psn = qp->s_psn;
1016 		qp->s_sending_hpsn = qp->s_psn - 1;
1017 		qib_schedule_send(qp);
1018 	}
1019 }
1020 
1021 static inline void update_last_psn(struct rvt_qp *qp, u32 psn)
1022 {
1023 	qp->s_last_psn = psn;
1024 }
1025 
1026 /*
1027  * Generate a SWQE completion.
1028  * This is similar to qib_send_complete but has to check to be sure
1029  * that the SGEs are not being referenced if the SWQE is being resent.
1030  */
1031 static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
1032 					 struct rvt_swqe *wqe,
1033 					 struct qib_ibport *ibp)
1034 {
1035 	struct ib_wc wc;
1036 	unsigned i;
1037 
1038 	/*
1039 	 * Don't decrement refcount and don't generate a
1040 	 * completion if the SWQE is being resent until the send
1041 	 * is finished.
1042 	 */
1043 	if (qib_cmp24(wqe->lpsn, qp->s_sending_psn) < 0 ||
1044 	    qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) > 0) {
1045 		u32 s_last;
1046 
1047 		for (i = 0; i < wqe->wr.num_sge; i++) {
1048 			struct rvt_sge *sge = &wqe->sg_list[i];
1049 
1050 			rvt_put_mr(sge->mr);
1051 		}
1052 		s_last = qp->s_last;
1053 		if (++s_last >= qp->s_size)
1054 			s_last = 0;
1055 		qp->s_last = s_last;
1056 		/* see post_send() */
1057 		barrier();
1058 		/* Post a send completion queue entry if requested. */
1059 		if (!(qp->s_flags & RVT_S_SIGNAL_REQ_WR) ||
1060 		    (wqe->wr.send_flags & IB_SEND_SIGNALED)) {
1061 			memset(&wc, 0, sizeof(wc));
1062 			wc.wr_id = wqe->wr.wr_id;
1063 			wc.status = IB_WC_SUCCESS;
1064 			wc.opcode = ib_qib_wc_opcode[wqe->wr.opcode];
1065 			wc.byte_len = wqe->length;
1066 			wc.qp = &qp->ibqp;
1067 			rvt_cq_enter(ibcq_to_rvtcq(qp->ibqp.send_cq), &wc, 0);
1068 		}
1069 	} else
1070 		this_cpu_inc(*ibp->rvp.rc_delayed_comp);
1071 
1072 	qp->s_retry = qp->s_retry_cnt;
1073 	update_last_psn(qp, wqe->lpsn);
1074 
1075 	/*
1076 	 * If we are completing a request which is in the process of
1077 	 * being resent, we can stop resending it since we know the
1078 	 * responder has already seen it.
1079 	 */
1080 	if (qp->s_acked == qp->s_cur) {
1081 		if (++qp->s_cur >= qp->s_size)
1082 			qp->s_cur = 0;
1083 		qp->s_acked = qp->s_cur;
1084 		wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
1085 		if (qp->s_acked != qp->s_tail) {
1086 			qp->s_state = OP(SEND_LAST);
1087 			qp->s_psn = wqe->psn;
1088 		}
1089 	} else {
1090 		if (++qp->s_acked >= qp->s_size)
1091 			qp->s_acked = 0;
1092 		if (qp->state == IB_QPS_SQD && qp->s_acked == qp->s_cur)
1093 			qp->s_draining = 0;
1094 		wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1095 	}
1096 	return wqe;
1097 }
1098 
1099 /**
1100  * do_rc_ack - process an incoming RC ACK
1101  * @qp: the QP the ACK came in on
1102  * @psn: the packet sequence number of the ACK
1103  * @opcode: the opcode of the request that resulted in the ACK
1104  *
1105  * This is called from qib_rc_rcv_resp() to process an incoming RC ACK
1106  * for the given QP.
1107  * Called at interrupt level with the QP s_lock held.
1108  * Returns 1 if OK, 0 if current operation should be aborted (NAK).
1109  */
1110 static int do_rc_ack(struct rvt_qp *qp, u32 aeth, u32 psn, int opcode,
1111 		     u64 val, struct qib_ctxtdata *rcd)
1112 {
1113 	struct qib_ibport *ibp;
1114 	enum ib_wc_status status;
1115 	struct rvt_swqe *wqe;
1116 	int ret = 0;
1117 	u32 ack_psn;
1118 	int diff;
1119 
1120 	/* Remove QP from retry timer */
1121 	if (qp->s_flags & (RVT_S_TIMER | RVT_S_WAIT_RNR)) {
1122 		qp->s_flags &= ~(RVT_S_TIMER | RVT_S_WAIT_RNR);
1123 		del_timer(&qp->s_timer);
1124 	}
1125 
1126 	/*
1127 	 * Note that NAKs implicitly ACK outstanding SEND and RDMA write
1128 	 * requests and implicitly NAK RDMA read and atomic requests issued
1129 	 * before the NAK'ed request.  The MSN won't include the NAK'ed
1130 	 * request but will include an ACK'ed request(s).
1131 	 */
1132 	ack_psn = psn;
1133 	if (aeth >> 29)
1134 		ack_psn--;
1135 	wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1136 	ibp = to_iport(qp->ibqp.device, qp->port_num);
1137 
1138 	/*
1139 	 * The MSN might be for a later WQE than the PSN indicates so
1140 	 * only complete WQEs that the PSN finishes.
1141 	 */
1142 	while ((diff = qib_cmp24(ack_psn, wqe->lpsn)) >= 0) {
1143 		/*
1144 		 * RDMA_READ_RESPONSE_ONLY is a special case since
1145 		 * we want to generate completion events for everything
1146 		 * before the RDMA read, copy the data, then generate
1147 		 * the completion for the read.
1148 		 */
1149 		if (wqe->wr.opcode == IB_WR_RDMA_READ &&
1150 		    opcode == OP(RDMA_READ_RESPONSE_ONLY) &&
1151 		    diff == 0) {
1152 			ret = 1;
1153 			goto bail;
1154 		}
1155 		/*
1156 		 * If this request is a RDMA read or atomic, and the ACK is
1157 		 * for a later operation, this ACK NAKs the RDMA read or
1158 		 * atomic.  In other words, only a RDMA_READ_LAST or ONLY
1159 		 * can ACK a RDMA read and likewise for atomic ops.  Note
1160 		 * that the NAK case can only happen if relaxed ordering is
1161 		 * used and requests are sent after an RDMA read or atomic
1162 		 * is sent but before the response is received.
1163 		 */
1164 		if ((wqe->wr.opcode == IB_WR_RDMA_READ &&
1165 		     (opcode != OP(RDMA_READ_RESPONSE_LAST) || diff != 0)) ||
1166 		    ((wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
1167 		      wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD) &&
1168 		     (opcode != OP(ATOMIC_ACKNOWLEDGE) || diff != 0))) {
1169 			/* Retry this request. */
1170 			if (!(qp->r_flags & RVT_R_RDMAR_SEQ)) {
1171 				qp->r_flags |= RVT_R_RDMAR_SEQ;
1172 				qib_restart_rc(qp, qp->s_last_psn + 1, 0);
1173 				if (list_empty(&qp->rspwait)) {
1174 					qp->r_flags |= RVT_R_RSP_SEND;
1175 					rvt_get_qp(qp);
1176 					list_add_tail(&qp->rspwait,
1177 						      &rcd->qp_wait_list);
1178 				}
1179 			}
1180 			/*
1181 			 * No need to process the ACK/NAK since we are
1182 			 * restarting an earlier request.
1183 			 */
1184 			goto bail;
1185 		}
1186 		if (wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
1187 		    wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD) {
1188 			u64 *vaddr = wqe->sg_list[0].vaddr;
1189 			*vaddr = val;
1190 		}
1191 		if (qp->s_num_rd_atomic &&
1192 		    (wqe->wr.opcode == IB_WR_RDMA_READ ||
1193 		     wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
1194 		     wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD)) {
1195 			qp->s_num_rd_atomic--;
1196 			/* Restart sending task if fence is complete */
1197 			if ((qp->s_flags & RVT_S_WAIT_FENCE) &&
1198 			    !qp->s_num_rd_atomic) {
1199 				qp->s_flags &= ~(RVT_S_WAIT_FENCE |
1200 						 RVT_S_WAIT_ACK);
1201 				qib_schedule_send(qp);
1202 			} else if (qp->s_flags & RVT_S_WAIT_RDMAR) {
1203 				qp->s_flags &= ~(RVT_S_WAIT_RDMAR |
1204 						 RVT_S_WAIT_ACK);
1205 				qib_schedule_send(qp);
1206 			}
1207 		}
1208 		wqe = do_rc_completion(qp, wqe, ibp);
1209 		if (qp->s_acked == qp->s_tail)
1210 			break;
1211 	}
1212 
1213 	switch (aeth >> 29) {
1214 	case 0:         /* ACK */
1215 		this_cpu_inc(*ibp->rvp.rc_acks);
1216 		if (qp->s_acked != qp->s_tail) {
1217 			/*
1218 			 * We are expecting more ACKs so
1219 			 * reset the retransmit timer.
1220 			 */
1221 			start_timer(qp);
1222 			/*
1223 			 * We can stop resending the earlier packets and
1224 			 * continue with the next packet the receiver wants.
1225 			 */
1226 			if (qib_cmp24(qp->s_psn, psn) <= 0)
1227 				reset_psn(qp, psn + 1);
1228 		} else if (qib_cmp24(qp->s_psn, psn) <= 0) {
1229 			qp->s_state = OP(SEND_LAST);
1230 			qp->s_psn = psn + 1;
1231 		}
1232 		if (qp->s_flags & RVT_S_WAIT_ACK) {
1233 			qp->s_flags &= ~RVT_S_WAIT_ACK;
1234 			qib_schedule_send(qp);
1235 		}
1236 		qib_get_credit(qp, aeth);
1237 		qp->s_rnr_retry = qp->s_rnr_retry_cnt;
1238 		qp->s_retry = qp->s_retry_cnt;
1239 		update_last_psn(qp, psn);
1240 		ret = 1;
1241 		goto bail;
1242 
1243 	case 1:         /* RNR NAK */
1244 		ibp->rvp.n_rnr_naks++;
1245 		if (qp->s_acked == qp->s_tail)
1246 			goto bail;
1247 		if (qp->s_flags & RVT_S_WAIT_RNR)
1248 			goto bail;
1249 		if (qp->s_rnr_retry == 0) {
1250 			status = IB_WC_RNR_RETRY_EXC_ERR;
1251 			goto class_b;
1252 		}
1253 		if (qp->s_rnr_retry_cnt < 7)
1254 			qp->s_rnr_retry--;
1255 
1256 		/* The last valid PSN is the previous PSN. */
1257 		update_last_psn(qp, psn - 1);
1258 
1259 		ibp->rvp.n_rc_resends += (qp->s_psn - psn) & QIB_PSN_MASK;
1260 
1261 		reset_psn(qp, psn);
1262 
1263 		qp->s_flags &= ~(RVT_S_WAIT_SSN_CREDIT | RVT_S_WAIT_ACK);
1264 		qp->s_flags |= RVT_S_WAIT_RNR;
1265 		qp->s_timer.function = qib_rc_rnr_retry;
1266 		qp->s_timer.expires = jiffies + usecs_to_jiffies(
1267 			ib_qib_rnr_table[(aeth >> QIB_AETH_CREDIT_SHIFT) &
1268 					   QIB_AETH_CREDIT_MASK]);
1269 		add_timer(&qp->s_timer);
1270 		goto bail;
1271 
1272 	case 3:         /* NAK */
1273 		if (qp->s_acked == qp->s_tail)
1274 			goto bail;
1275 		/* The last valid PSN is the previous PSN. */
1276 		update_last_psn(qp, psn - 1);
1277 		switch ((aeth >> QIB_AETH_CREDIT_SHIFT) &
1278 			QIB_AETH_CREDIT_MASK) {
1279 		case 0: /* PSN sequence error */
1280 			ibp->rvp.n_seq_naks++;
1281 			/*
1282 			 * Back up to the responder's expected PSN.
1283 			 * Note that we might get a NAK in the middle of an
1284 			 * RDMA READ response which terminates the RDMA
1285 			 * READ.
1286 			 */
1287 			qib_restart_rc(qp, psn, 0);
1288 			qib_schedule_send(qp);
1289 			break;
1290 
1291 		case 1: /* Invalid Request */
1292 			status = IB_WC_REM_INV_REQ_ERR;
1293 			ibp->rvp.n_other_naks++;
1294 			goto class_b;
1295 
1296 		case 2: /* Remote Access Error */
1297 			status = IB_WC_REM_ACCESS_ERR;
1298 			ibp->rvp.n_other_naks++;
1299 			goto class_b;
1300 
1301 		case 3: /* Remote Operation Error */
1302 			status = IB_WC_REM_OP_ERR;
1303 			ibp->rvp.n_other_naks++;
1304 class_b:
1305 			if (qp->s_last == qp->s_acked) {
1306 				qib_send_complete(qp, wqe, status);
1307 				rvt_error_qp(qp, IB_WC_WR_FLUSH_ERR);
1308 			}
1309 			break;
1310 
1311 		default:
1312 			/* Ignore other reserved NAK error codes */
1313 			goto reserved;
1314 		}
1315 		qp->s_retry = qp->s_retry_cnt;
1316 		qp->s_rnr_retry = qp->s_rnr_retry_cnt;
1317 		goto bail;
1318 
1319 	default:                /* 2: reserved */
1320 reserved:
1321 		/* Ignore reserved NAK codes. */
1322 		goto bail;
1323 	}
1324 
1325 bail:
1326 	return ret;
1327 }
1328 
1329 /*
1330  * We have seen an out of sequence RDMA read middle or last packet.
1331  * This ACKs SENDs and RDMA writes up to the first RDMA read or atomic SWQE.
1332  */
1333 static void rdma_seq_err(struct rvt_qp *qp, struct qib_ibport *ibp, u32 psn,
1334 			 struct qib_ctxtdata *rcd)
1335 {
1336 	struct rvt_swqe *wqe;
1337 
1338 	/* Remove QP from retry timer */
1339 	if (qp->s_flags & (RVT_S_TIMER | RVT_S_WAIT_RNR)) {
1340 		qp->s_flags &= ~(RVT_S_TIMER | RVT_S_WAIT_RNR);
1341 		del_timer(&qp->s_timer);
1342 	}
1343 
1344 	wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1345 
1346 	while (qib_cmp24(psn, wqe->lpsn) > 0) {
1347 		if (wqe->wr.opcode == IB_WR_RDMA_READ ||
1348 		    wqe->wr.opcode == IB_WR_ATOMIC_CMP_AND_SWP ||
1349 		    wqe->wr.opcode == IB_WR_ATOMIC_FETCH_AND_ADD)
1350 			break;
1351 		wqe = do_rc_completion(qp, wqe, ibp);
1352 	}
1353 
1354 	ibp->rvp.n_rdma_seq++;
1355 	qp->r_flags |= RVT_R_RDMAR_SEQ;
1356 	qib_restart_rc(qp, qp->s_last_psn + 1, 0);
1357 	if (list_empty(&qp->rspwait)) {
1358 		qp->r_flags |= RVT_R_RSP_SEND;
1359 		rvt_get_qp(qp);
1360 		list_add_tail(&qp->rspwait, &rcd->qp_wait_list);
1361 	}
1362 }
1363 
1364 /**
1365  * qib_rc_rcv_resp - process an incoming RC response packet
1366  * @ibp: the port this packet came in on
1367  * @ohdr: the other headers for this packet
1368  * @data: the packet data
1369  * @tlen: the packet length
1370  * @qp: the QP for this packet
1371  * @opcode: the opcode for this packet
1372  * @psn: the packet sequence number for this packet
1373  * @hdrsize: the header length
1374  * @pmtu: the path MTU
1375  *
1376  * This is called from qib_rc_rcv() to process an incoming RC response
1377  * packet for the given QP.
1378  * Called at interrupt level.
1379  */
1380 static void qib_rc_rcv_resp(struct qib_ibport *ibp,
1381 			    struct ib_other_headers *ohdr,
1382 			    void *data, u32 tlen,
1383 			    struct rvt_qp *qp,
1384 			    u32 opcode,
1385 			    u32 psn, u32 hdrsize, u32 pmtu,
1386 			    struct qib_ctxtdata *rcd)
1387 {
1388 	struct rvt_swqe *wqe;
1389 	struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1390 	enum ib_wc_status status;
1391 	unsigned long flags;
1392 	int diff;
1393 	u32 pad;
1394 	u32 aeth;
1395 	u64 val;
1396 
1397 	if (opcode != OP(RDMA_READ_RESPONSE_MIDDLE)) {
1398 		/*
1399 		 * If ACK'd PSN on SDMA busy list try to make progress to
1400 		 * reclaim SDMA credits.
1401 		 */
1402 		if ((qib_cmp24(psn, qp->s_sending_psn) >= 0) &&
1403 		    (qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)) {
1404 
1405 			/*
1406 			 * If send tasklet not running attempt to progress
1407 			 * SDMA queue.
1408 			 */
1409 			if (!(qp->s_flags & RVT_S_BUSY)) {
1410 				/* Acquire SDMA Lock */
1411 				spin_lock_irqsave(&ppd->sdma_lock, flags);
1412 				/* Invoke sdma make progress */
1413 				qib_sdma_make_progress(ppd);
1414 				/* Release SDMA Lock */
1415 				spin_unlock_irqrestore(&ppd->sdma_lock, flags);
1416 			}
1417 		}
1418 	}
1419 
1420 	spin_lock_irqsave(&qp->s_lock, flags);
1421 	if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK))
1422 		goto ack_done;
1423 
1424 	/* Ignore invalid responses. */
1425 	smp_read_barrier_depends(); /* see post_one_send */
1426 	if (qib_cmp24(psn, ACCESS_ONCE(qp->s_next_psn)) >= 0)
1427 		goto ack_done;
1428 
1429 	/* Ignore duplicate responses. */
1430 	diff = qib_cmp24(psn, qp->s_last_psn);
1431 	if (unlikely(diff <= 0)) {
1432 		/* Update credits for "ghost" ACKs */
1433 		if (diff == 0 && opcode == OP(ACKNOWLEDGE)) {
1434 			aeth = be32_to_cpu(ohdr->u.aeth);
1435 			if ((aeth >> 29) == 0)
1436 				qib_get_credit(qp, aeth);
1437 		}
1438 		goto ack_done;
1439 	}
1440 
1441 	/*
1442 	 * Skip everything other than the PSN we expect, if we are waiting
1443 	 * for a reply to a restarted RDMA read or atomic op.
1444 	 */
1445 	if (qp->r_flags & RVT_R_RDMAR_SEQ) {
1446 		if (qib_cmp24(psn, qp->s_last_psn + 1) != 0)
1447 			goto ack_done;
1448 		qp->r_flags &= ~RVT_R_RDMAR_SEQ;
1449 	}
1450 
1451 	if (unlikely(qp->s_acked == qp->s_tail))
1452 		goto ack_done;
1453 	wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1454 	status = IB_WC_SUCCESS;
1455 
1456 	switch (opcode) {
1457 	case OP(ACKNOWLEDGE):
1458 	case OP(ATOMIC_ACKNOWLEDGE):
1459 	case OP(RDMA_READ_RESPONSE_FIRST):
1460 		aeth = be32_to_cpu(ohdr->u.aeth);
1461 		if (opcode == OP(ATOMIC_ACKNOWLEDGE))
1462 			val = ib_u64_get(&ohdr->u.at.atomic_ack_eth);
1463 		else
1464 			val = 0;
1465 		if (!do_rc_ack(qp, aeth, psn, opcode, val, rcd) ||
1466 		    opcode != OP(RDMA_READ_RESPONSE_FIRST))
1467 			goto ack_done;
1468 		hdrsize += 4;
1469 		wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1470 		if (unlikely(wqe->wr.opcode != IB_WR_RDMA_READ))
1471 			goto ack_op_err;
1472 		/*
1473 		 * If this is a response to a resent RDMA read, we
1474 		 * have to be careful to copy the data to the right
1475 		 * location.
1476 		 */
1477 		qp->s_rdma_read_len = restart_sge(&qp->s_rdma_read_sge,
1478 						  wqe, psn, pmtu);
1479 		goto read_middle;
1480 
1481 	case OP(RDMA_READ_RESPONSE_MIDDLE):
1482 		/* no AETH, no ACK */
1483 		if (unlikely(qib_cmp24(psn, qp->s_last_psn + 1)))
1484 			goto ack_seq_err;
1485 		if (unlikely(wqe->wr.opcode != IB_WR_RDMA_READ))
1486 			goto ack_op_err;
1487 read_middle:
1488 		if (unlikely(tlen != (hdrsize + pmtu + 4)))
1489 			goto ack_len_err;
1490 		if (unlikely(pmtu >= qp->s_rdma_read_len))
1491 			goto ack_len_err;
1492 
1493 		/*
1494 		 * We got a response so update the timeout.
1495 		 * 4.096 usec. * (1 << qp->timeout)
1496 		 */
1497 		qp->s_flags |= RVT_S_TIMER;
1498 		mod_timer(&qp->s_timer, jiffies + qp->timeout_jiffies);
1499 		if (qp->s_flags & RVT_S_WAIT_ACK) {
1500 			qp->s_flags &= ~RVT_S_WAIT_ACK;
1501 			qib_schedule_send(qp);
1502 		}
1503 
1504 		if (opcode == OP(RDMA_READ_RESPONSE_MIDDLE))
1505 			qp->s_retry = qp->s_retry_cnt;
1506 
1507 		/*
1508 		 * Update the RDMA receive state but do the copy w/o
1509 		 * holding the locks and blocking interrupts.
1510 		 */
1511 		qp->s_rdma_read_len -= pmtu;
1512 		update_last_psn(qp, psn);
1513 		spin_unlock_irqrestore(&qp->s_lock, flags);
1514 		qib_copy_sge(&qp->s_rdma_read_sge, data, pmtu, 0);
1515 		goto bail;
1516 
1517 	case OP(RDMA_READ_RESPONSE_ONLY):
1518 		aeth = be32_to_cpu(ohdr->u.aeth);
1519 		if (!do_rc_ack(qp, aeth, psn, opcode, 0, rcd))
1520 			goto ack_done;
1521 		/* Get the number of bytes the message was padded by. */
1522 		pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
1523 		/*
1524 		 * Check that the data size is >= 0 && <= pmtu.
1525 		 * Remember to account for the AETH header (4) and
1526 		 * ICRC (4).
1527 		 */
1528 		if (unlikely(tlen < (hdrsize + pad + 8)))
1529 			goto ack_len_err;
1530 		/*
1531 		 * If this is a response to a resent RDMA read, we
1532 		 * have to be careful to copy the data to the right
1533 		 * location.
1534 		 */
1535 		wqe = rvt_get_swqe_ptr(qp, qp->s_acked);
1536 		qp->s_rdma_read_len = restart_sge(&qp->s_rdma_read_sge,
1537 						  wqe, psn, pmtu);
1538 		goto read_last;
1539 
1540 	case OP(RDMA_READ_RESPONSE_LAST):
1541 		/* ACKs READ req. */
1542 		if (unlikely(qib_cmp24(psn, qp->s_last_psn + 1)))
1543 			goto ack_seq_err;
1544 		if (unlikely(wqe->wr.opcode != IB_WR_RDMA_READ))
1545 			goto ack_op_err;
1546 		/* Get the number of bytes the message was padded by. */
1547 		pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
1548 		/*
1549 		 * Check that the data size is >= 1 && <= pmtu.
1550 		 * Remember to account for the AETH header (4) and
1551 		 * ICRC (4).
1552 		 */
1553 		if (unlikely(tlen <= (hdrsize + pad + 8)))
1554 			goto ack_len_err;
1555 read_last:
1556 		tlen -= hdrsize + pad + 8;
1557 		if (unlikely(tlen != qp->s_rdma_read_len))
1558 			goto ack_len_err;
1559 		aeth = be32_to_cpu(ohdr->u.aeth);
1560 		qib_copy_sge(&qp->s_rdma_read_sge, data, tlen, 0);
1561 		WARN_ON(qp->s_rdma_read_sge.num_sge);
1562 		(void) do_rc_ack(qp, aeth, psn,
1563 				 OP(RDMA_READ_RESPONSE_LAST), 0, rcd);
1564 		goto ack_done;
1565 	}
1566 
1567 ack_op_err:
1568 	status = IB_WC_LOC_QP_OP_ERR;
1569 	goto ack_err;
1570 
1571 ack_seq_err:
1572 	rdma_seq_err(qp, ibp, psn, rcd);
1573 	goto ack_done;
1574 
1575 ack_len_err:
1576 	status = IB_WC_LOC_LEN_ERR;
1577 ack_err:
1578 	if (qp->s_last == qp->s_acked) {
1579 		qib_send_complete(qp, wqe, status);
1580 		rvt_error_qp(qp, IB_WC_WR_FLUSH_ERR);
1581 	}
1582 ack_done:
1583 	spin_unlock_irqrestore(&qp->s_lock, flags);
1584 bail:
1585 	return;
1586 }
1587 
1588 /**
1589  * qib_rc_rcv_error - process an incoming duplicate or error RC packet
1590  * @ohdr: the other headers for this packet
1591  * @data: the packet data
1592  * @qp: the QP for this packet
1593  * @opcode: the opcode for this packet
1594  * @psn: the packet sequence number for this packet
1595  * @diff: the difference between the PSN and the expected PSN
1596  *
1597  * This is called from qib_rc_rcv() to process an unexpected
1598  * incoming RC packet for the given QP.
1599  * Called at interrupt level.
1600  * Return 1 if no more processing is needed; otherwise return 0 to
1601  * schedule a response to be sent.
1602  */
1603 static int qib_rc_rcv_error(struct ib_other_headers *ohdr,
1604 			    void *data,
1605 			    struct rvt_qp *qp,
1606 			    u32 opcode,
1607 			    u32 psn,
1608 			    int diff,
1609 			    struct qib_ctxtdata *rcd)
1610 {
1611 	struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
1612 	struct rvt_ack_entry *e;
1613 	unsigned long flags;
1614 	u8 i, prev;
1615 	int old_req;
1616 
1617 	if (diff > 0) {
1618 		/*
1619 		 * Packet sequence error.
1620 		 * A NAK will ACK earlier sends and RDMA writes.
1621 		 * Don't queue the NAK if we already sent one.
1622 		 */
1623 		if (!qp->r_nak_state) {
1624 			ibp->rvp.n_rc_seqnak++;
1625 			qp->r_nak_state = IB_NAK_PSN_ERROR;
1626 			/* Use the expected PSN. */
1627 			qp->r_ack_psn = qp->r_psn;
1628 			/*
1629 			 * Wait to send the sequence NAK until all packets
1630 			 * in the receive queue have been processed.
1631 			 * Otherwise, we end up propagating congestion.
1632 			 */
1633 			if (list_empty(&qp->rspwait)) {
1634 				qp->r_flags |= RVT_R_RSP_NAK;
1635 				rvt_get_qp(qp);
1636 				list_add_tail(&qp->rspwait, &rcd->qp_wait_list);
1637 			}
1638 		}
1639 		goto done;
1640 	}
1641 
1642 	/*
1643 	 * Handle a duplicate request.  Don't re-execute SEND, RDMA
1644 	 * write or atomic op.  Don't NAK errors, just silently drop
1645 	 * the duplicate request.  Note that r_sge, r_len, and
1646 	 * r_rcv_len may be in use so don't modify them.
1647 	 *
1648 	 * We are supposed to ACK the earliest duplicate PSN but we
1649 	 * can coalesce an outstanding duplicate ACK.  We have to
1650 	 * send the earliest so that RDMA reads can be restarted at
1651 	 * the requester's expected PSN.
1652 	 *
1653 	 * First, find where this duplicate PSN falls within the
1654 	 * ACKs previously sent.
1655 	 * old_req is true if there is an older response that is scheduled
1656 	 * to be sent before sending this one.
1657 	 */
1658 	e = NULL;
1659 	old_req = 1;
1660 	ibp->rvp.n_rc_dupreq++;
1661 
1662 	spin_lock_irqsave(&qp->s_lock, flags);
1663 
1664 	for (i = qp->r_head_ack_queue; ; i = prev) {
1665 		if (i == qp->s_tail_ack_queue)
1666 			old_req = 0;
1667 		if (i)
1668 			prev = i - 1;
1669 		else
1670 			prev = QIB_MAX_RDMA_ATOMIC;
1671 		if (prev == qp->r_head_ack_queue) {
1672 			e = NULL;
1673 			break;
1674 		}
1675 		e = &qp->s_ack_queue[prev];
1676 		if (!e->opcode) {
1677 			e = NULL;
1678 			break;
1679 		}
1680 		if (qib_cmp24(psn, e->psn) >= 0) {
1681 			if (prev == qp->s_tail_ack_queue &&
1682 			    qib_cmp24(psn, e->lpsn) <= 0)
1683 				old_req = 0;
1684 			break;
1685 		}
1686 	}
1687 	switch (opcode) {
1688 	case OP(RDMA_READ_REQUEST): {
1689 		struct ib_reth *reth;
1690 		u32 offset;
1691 		u32 len;
1692 
1693 		/*
1694 		 * If we didn't find the RDMA read request in the ack queue,
1695 		 * we can ignore this request.
1696 		 */
1697 		if (!e || e->opcode != OP(RDMA_READ_REQUEST))
1698 			goto unlock_done;
1699 		/* RETH comes after BTH */
1700 		reth = &ohdr->u.rc.reth;
1701 		/*
1702 		 * Address range must be a subset of the original
1703 		 * request and start on pmtu boundaries.
1704 		 * We reuse the old ack_queue slot since the requester
1705 		 * should not back up and request an earlier PSN for the
1706 		 * same request.
1707 		 */
1708 		offset = ((psn - e->psn) & QIB_PSN_MASK) *
1709 			qp->pmtu;
1710 		len = be32_to_cpu(reth->length);
1711 		if (unlikely(offset + len != e->rdma_sge.sge_length))
1712 			goto unlock_done;
1713 		if (e->rdma_sge.mr) {
1714 			rvt_put_mr(e->rdma_sge.mr);
1715 			e->rdma_sge.mr = NULL;
1716 		}
1717 		if (len != 0) {
1718 			u32 rkey = be32_to_cpu(reth->rkey);
1719 			u64 vaddr = be64_to_cpu(reth->vaddr);
1720 			int ok;
1721 
1722 			ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey,
1723 					 IB_ACCESS_REMOTE_READ);
1724 			if (unlikely(!ok))
1725 				goto unlock_done;
1726 		} else {
1727 			e->rdma_sge.vaddr = NULL;
1728 			e->rdma_sge.length = 0;
1729 			e->rdma_sge.sge_length = 0;
1730 		}
1731 		e->psn = psn;
1732 		if (old_req)
1733 			goto unlock_done;
1734 		qp->s_tail_ack_queue = prev;
1735 		break;
1736 	}
1737 
1738 	case OP(COMPARE_SWAP):
1739 	case OP(FETCH_ADD): {
1740 		/*
1741 		 * If we didn't find the atomic request in the ack queue
1742 		 * or the send tasklet is already backed up to send an
1743 		 * earlier entry, we can ignore this request.
1744 		 */
1745 		if (!e || e->opcode != (u8) opcode || old_req)
1746 			goto unlock_done;
1747 		qp->s_tail_ack_queue = prev;
1748 		break;
1749 	}
1750 
1751 	default:
1752 		/*
1753 		 * Ignore this operation if it doesn't request an ACK
1754 		 * or an earlier RDMA read or atomic is going to be resent.
1755 		 */
1756 		if (!(psn & IB_BTH_REQ_ACK) || old_req)
1757 			goto unlock_done;
1758 		/*
1759 		 * Resend the most recent ACK if this request is
1760 		 * after all the previous RDMA reads and atomics.
1761 		 */
1762 		if (i == qp->r_head_ack_queue) {
1763 			spin_unlock_irqrestore(&qp->s_lock, flags);
1764 			qp->r_nak_state = 0;
1765 			qp->r_ack_psn = qp->r_psn - 1;
1766 			goto send_ack;
1767 		}
1768 		/*
1769 		 * Try to send a simple ACK to work around a Mellanox bug
1770 		 * which doesn't accept a RDMA read response or atomic
1771 		 * response as an ACK for earlier SENDs or RDMA writes.
1772 		 */
1773 		if (!(qp->s_flags & RVT_S_RESP_PENDING)) {
1774 			spin_unlock_irqrestore(&qp->s_lock, flags);
1775 			qp->r_nak_state = 0;
1776 			qp->r_ack_psn = qp->s_ack_queue[i].psn - 1;
1777 			goto send_ack;
1778 		}
1779 		/*
1780 		 * Resend the RDMA read or atomic op which
1781 		 * ACKs this duplicate request.
1782 		 */
1783 		qp->s_tail_ack_queue = i;
1784 		break;
1785 	}
1786 	qp->s_ack_state = OP(ACKNOWLEDGE);
1787 	qp->s_flags |= RVT_S_RESP_PENDING;
1788 	qp->r_nak_state = 0;
1789 	qib_schedule_send(qp);
1790 
1791 unlock_done:
1792 	spin_unlock_irqrestore(&qp->s_lock, flags);
1793 done:
1794 	return 1;
1795 
1796 send_ack:
1797 	return 0;
1798 }
1799 
1800 void qib_rc_error(struct rvt_qp *qp, enum ib_wc_status err)
1801 {
1802 	unsigned long flags;
1803 	int lastwqe;
1804 
1805 	spin_lock_irqsave(&qp->s_lock, flags);
1806 	lastwqe = rvt_error_qp(qp, err);
1807 	spin_unlock_irqrestore(&qp->s_lock, flags);
1808 
1809 	if (lastwqe) {
1810 		struct ib_event ev;
1811 
1812 		ev.device = qp->ibqp.device;
1813 		ev.element.qp = &qp->ibqp;
1814 		ev.event = IB_EVENT_QP_LAST_WQE_REACHED;
1815 		qp->ibqp.event_handler(&ev, qp->ibqp.qp_context);
1816 	}
1817 }
1818 
1819 static inline void qib_update_ack_queue(struct rvt_qp *qp, unsigned n)
1820 {
1821 	unsigned next;
1822 
1823 	next = n + 1;
1824 	if (next > QIB_MAX_RDMA_ATOMIC)
1825 		next = 0;
1826 	qp->s_tail_ack_queue = next;
1827 	qp->s_ack_state = OP(ACKNOWLEDGE);
1828 }
1829 
1830 /**
1831  * qib_rc_rcv - process an incoming RC packet
1832  * @rcd: the context pointer
1833  * @hdr: the header of this packet
1834  * @has_grh: true if the header has a GRH
1835  * @data: the packet data
1836  * @tlen: the packet length
1837  * @qp: the QP for this packet
1838  *
1839  * This is called from qib_qp_rcv() to process an incoming RC packet
1840  * for the given QP.
1841  * Called at interrupt level.
1842  */
1843 void qib_rc_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr,
1844 		int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
1845 {
1846 	struct qib_ibport *ibp = &rcd->ppd->ibport_data;
1847 	struct ib_other_headers *ohdr;
1848 	u32 opcode;
1849 	u32 hdrsize;
1850 	u32 psn;
1851 	u32 pad;
1852 	struct ib_wc wc;
1853 	u32 pmtu = qp->pmtu;
1854 	int diff;
1855 	struct ib_reth *reth;
1856 	unsigned long flags;
1857 	int ret;
1858 
1859 	/* Check for GRH */
1860 	if (!has_grh) {
1861 		ohdr = &hdr->u.oth;
1862 		hdrsize = 8 + 12;       /* LRH + BTH */
1863 	} else {
1864 		ohdr = &hdr->u.l.oth;
1865 		hdrsize = 8 + 40 + 12;  /* LRH + GRH + BTH */
1866 	}
1867 
1868 	opcode = be32_to_cpu(ohdr->bth[0]);
1869 	if (qib_ruc_check_hdr(ibp, hdr, has_grh, qp, opcode))
1870 		return;
1871 
1872 	psn = be32_to_cpu(ohdr->bth[2]);
1873 	opcode >>= 24;
1874 
1875 	/*
1876 	 * Process responses (ACKs) before anything else.  Note that the
1877 	 * packet sequence number will be for something in the send work
1878 	 * queue rather than the expected receive packet sequence number.
1879 	 * In other words, this QP is the requester.
1880 	 */
1881 	if (opcode >= OP(RDMA_READ_RESPONSE_FIRST) &&
1882 	    opcode <= OP(ATOMIC_ACKNOWLEDGE)) {
1883 		qib_rc_rcv_resp(ibp, ohdr, data, tlen, qp, opcode, psn,
1884 				hdrsize, pmtu, rcd);
1885 		return;
1886 	}
1887 
1888 	/* Compute 24 bits worth of difference. */
1889 	diff = qib_cmp24(psn, qp->r_psn);
1890 	if (unlikely(diff)) {
1891 		if (qib_rc_rcv_error(ohdr, data, qp, opcode, psn, diff, rcd))
1892 			return;
1893 		goto send_ack;
1894 	}
1895 
1896 	/* Check for opcode sequence errors. */
1897 	switch (qp->r_state) {
1898 	case OP(SEND_FIRST):
1899 	case OP(SEND_MIDDLE):
1900 		if (opcode == OP(SEND_MIDDLE) ||
1901 		    opcode == OP(SEND_LAST) ||
1902 		    opcode == OP(SEND_LAST_WITH_IMMEDIATE))
1903 			break;
1904 		goto nack_inv;
1905 
1906 	case OP(RDMA_WRITE_FIRST):
1907 	case OP(RDMA_WRITE_MIDDLE):
1908 		if (opcode == OP(RDMA_WRITE_MIDDLE) ||
1909 		    opcode == OP(RDMA_WRITE_LAST) ||
1910 		    opcode == OP(RDMA_WRITE_LAST_WITH_IMMEDIATE))
1911 			break;
1912 		goto nack_inv;
1913 
1914 	default:
1915 		if (opcode == OP(SEND_MIDDLE) ||
1916 		    opcode == OP(SEND_LAST) ||
1917 		    opcode == OP(SEND_LAST_WITH_IMMEDIATE) ||
1918 		    opcode == OP(RDMA_WRITE_MIDDLE) ||
1919 		    opcode == OP(RDMA_WRITE_LAST) ||
1920 		    opcode == OP(RDMA_WRITE_LAST_WITH_IMMEDIATE))
1921 			goto nack_inv;
1922 		/*
1923 		 * Note that it is up to the requester to not send a new
1924 		 * RDMA read or atomic operation before receiving an ACK
1925 		 * for the previous operation.
1926 		 */
1927 		break;
1928 	}
1929 
1930 	if (qp->state == IB_QPS_RTR && !(qp->r_flags & RVT_R_COMM_EST)) {
1931 		qp->r_flags |= RVT_R_COMM_EST;
1932 		if (qp->ibqp.event_handler) {
1933 			struct ib_event ev;
1934 
1935 			ev.device = qp->ibqp.device;
1936 			ev.element.qp = &qp->ibqp;
1937 			ev.event = IB_EVENT_COMM_EST;
1938 			qp->ibqp.event_handler(&ev, qp->ibqp.qp_context);
1939 		}
1940 	}
1941 
1942 	/* OK, process the packet. */
1943 	switch (opcode) {
1944 	case OP(SEND_FIRST):
1945 		ret = qib_get_rwqe(qp, 0);
1946 		if (ret < 0)
1947 			goto nack_op_err;
1948 		if (!ret)
1949 			goto rnr_nak;
1950 		qp->r_rcv_len = 0;
1951 		/* FALLTHROUGH */
1952 	case OP(SEND_MIDDLE):
1953 	case OP(RDMA_WRITE_MIDDLE):
1954 send_middle:
1955 		/* Check for invalid length PMTU or posted rwqe len. */
1956 		if (unlikely(tlen != (hdrsize + pmtu + 4)))
1957 			goto nack_inv;
1958 		qp->r_rcv_len += pmtu;
1959 		if (unlikely(qp->r_rcv_len > qp->r_len))
1960 			goto nack_inv;
1961 		qib_copy_sge(&qp->r_sge, data, pmtu, 1);
1962 		break;
1963 
1964 	case OP(RDMA_WRITE_LAST_WITH_IMMEDIATE):
1965 		/* consume RWQE */
1966 		ret = qib_get_rwqe(qp, 1);
1967 		if (ret < 0)
1968 			goto nack_op_err;
1969 		if (!ret)
1970 			goto rnr_nak;
1971 		goto send_last_imm;
1972 
1973 	case OP(SEND_ONLY):
1974 	case OP(SEND_ONLY_WITH_IMMEDIATE):
1975 		ret = qib_get_rwqe(qp, 0);
1976 		if (ret < 0)
1977 			goto nack_op_err;
1978 		if (!ret)
1979 			goto rnr_nak;
1980 		qp->r_rcv_len = 0;
1981 		if (opcode == OP(SEND_ONLY))
1982 			goto no_immediate_data;
1983 		/* FALLTHROUGH for SEND_ONLY_WITH_IMMEDIATE */
1984 	case OP(SEND_LAST_WITH_IMMEDIATE):
1985 send_last_imm:
1986 		wc.ex.imm_data = ohdr->u.imm_data;
1987 		hdrsize += 4;
1988 		wc.wc_flags = IB_WC_WITH_IMM;
1989 		goto send_last;
1990 	case OP(SEND_LAST):
1991 	case OP(RDMA_WRITE_LAST):
1992 no_immediate_data:
1993 		wc.wc_flags = 0;
1994 		wc.ex.imm_data = 0;
1995 send_last:
1996 		/* Get the number of bytes the message was padded by. */
1997 		pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
1998 		/* Check for invalid length. */
1999 		/* XXX LAST len should be >= 1 */
2000 		if (unlikely(tlen < (hdrsize + pad + 4)))
2001 			goto nack_inv;
2002 		/* Don't count the CRC. */
2003 		tlen -= (hdrsize + pad + 4);
2004 		wc.byte_len = tlen + qp->r_rcv_len;
2005 		if (unlikely(wc.byte_len > qp->r_len))
2006 			goto nack_inv;
2007 		qib_copy_sge(&qp->r_sge, data, tlen, 1);
2008 		rvt_put_ss(&qp->r_sge);
2009 		qp->r_msn++;
2010 		if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
2011 			break;
2012 		wc.wr_id = qp->r_wr_id;
2013 		wc.status = IB_WC_SUCCESS;
2014 		if (opcode == OP(RDMA_WRITE_LAST_WITH_IMMEDIATE) ||
2015 		    opcode == OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE))
2016 			wc.opcode = IB_WC_RECV_RDMA_WITH_IMM;
2017 		else
2018 			wc.opcode = IB_WC_RECV;
2019 		wc.qp = &qp->ibqp;
2020 		wc.src_qp = qp->remote_qpn;
2021 		wc.slid = qp->remote_ah_attr.dlid;
2022 		wc.sl = qp->remote_ah_attr.sl;
2023 		/* zero fields that are N/A */
2024 		wc.vendor_err = 0;
2025 		wc.pkey_index = 0;
2026 		wc.dlid_path_bits = 0;
2027 		wc.port_num = 0;
2028 		/* Signal completion event if the solicited bit is set. */
2029 		rvt_cq_enter(ibcq_to_rvtcq(qp->ibqp.recv_cq), &wc,
2030 			     (ohdr->bth[0] &
2031 			      cpu_to_be32(IB_BTH_SOLICITED)) != 0);
2032 		break;
2033 
2034 	case OP(RDMA_WRITE_FIRST):
2035 	case OP(RDMA_WRITE_ONLY):
2036 	case OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE):
2037 		if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_WRITE)))
2038 			goto nack_inv;
2039 		/* consume RWQE */
2040 		reth = &ohdr->u.rc.reth;
2041 		hdrsize += sizeof(*reth);
2042 		qp->r_len = be32_to_cpu(reth->length);
2043 		qp->r_rcv_len = 0;
2044 		qp->r_sge.sg_list = NULL;
2045 		if (qp->r_len != 0) {
2046 			u32 rkey = be32_to_cpu(reth->rkey);
2047 			u64 vaddr = be64_to_cpu(reth->vaddr);
2048 			int ok;
2049 
2050 			/* Check rkey & NAK */
2051 			ok = rvt_rkey_ok(qp, &qp->r_sge.sge, qp->r_len, vaddr,
2052 					 rkey, IB_ACCESS_REMOTE_WRITE);
2053 			if (unlikely(!ok))
2054 				goto nack_acc;
2055 			qp->r_sge.num_sge = 1;
2056 		} else {
2057 			qp->r_sge.num_sge = 0;
2058 			qp->r_sge.sge.mr = NULL;
2059 			qp->r_sge.sge.vaddr = NULL;
2060 			qp->r_sge.sge.length = 0;
2061 			qp->r_sge.sge.sge_length = 0;
2062 		}
2063 		if (opcode == OP(RDMA_WRITE_FIRST))
2064 			goto send_middle;
2065 		else if (opcode == OP(RDMA_WRITE_ONLY))
2066 			goto no_immediate_data;
2067 		ret = qib_get_rwqe(qp, 1);
2068 		if (ret < 0)
2069 			goto nack_op_err;
2070 		if (!ret)
2071 			goto rnr_nak;
2072 		wc.ex.imm_data = ohdr->u.rc.imm_data;
2073 		hdrsize += 4;
2074 		wc.wc_flags = IB_WC_WITH_IMM;
2075 		goto send_last;
2076 
2077 	case OP(RDMA_READ_REQUEST): {
2078 		struct rvt_ack_entry *e;
2079 		u32 len;
2080 		u8 next;
2081 
2082 		if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_READ)))
2083 			goto nack_inv;
2084 		next = qp->r_head_ack_queue + 1;
2085 		/* s_ack_queue is size QIB_MAX_RDMA_ATOMIC+1 so use > not >= */
2086 		if (next > QIB_MAX_RDMA_ATOMIC)
2087 			next = 0;
2088 		spin_lock_irqsave(&qp->s_lock, flags);
2089 		if (unlikely(next == qp->s_tail_ack_queue)) {
2090 			if (!qp->s_ack_queue[next].sent)
2091 				goto nack_inv_unlck;
2092 			qib_update_ack_queue(qp, next);
2093 		}
2094 		e = &qp->s_ack_queue[qp->r_head_ack_queue];
2095 		if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
2096 			rvt_put_mr(e->rdma_sge.mr);
2097 			e->rdma_sge.mr = NULL;
2098 		}
2099 		reth = &ohdr->u.rc.reth;
2100 		len = be32_to_cpu(reth->length);
2101 		if (len) {
2102 			u32 rkey = be32_to_cpu(reth->rkey);
2103 			u64 vaddr = be64_to_cpu(reth->vaddr);
2104 			int ok;
2105 
2106 			/* Check rkey & NAK */
2107 			ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr,
2108 					 rkey, IB_ACCESS_REMOTE_READ);
2109 			if (unlikely(!ok))
2110 				goto nack_acc_unlck;
2111 			/*
2112 			 * Update the next expected PSN.  We add 1 later
2113 			 * below, so only add the remainder here.
2114 			 */
2115 			if (len > pmtu)
2116 				qp->r_psn += (len - 1) / pmtu;
2117 		} else {
2118 			e->rdma_sge.mr = NULL;
2119 			e->rdma_sge.vaddr = NULL;
2120 			e->rdma_sge.length = 0;
2121 			e->rdma_sge.sge_length = 0;
2122 		}
2123 		e->opcode = opcode;
2124 		e->sent = 0;
2125 		e->psn = psn;
2126 		e->lpsn = qp->r_psn;
2127 		/*
2128 		 * We need to increment the MSN here instead of when we
2129 		 * finish sending the result since a duplicate request would
2130 		 * increment it more than once.
2131 		 */
2132 		qp->r_msn++;
2133 		qp->r_psn++;
2134 		qp->r_state = opcode;
2135 		qp->r_nak_state = 0;
2136 		qp->r_head_ack_queue = next;
2137 
2138 		/* Schedule the send tasklet. */
2139 		qp->s_flags |= RVT_S_RESP_PENDING;
2140 		qib_schedule_send(qp);
2141 
2142 		goto sunlock;
2143 	}
2144 
2145 	case OP(COMPARE_SWAP):
2146 	case OP(FETCH_ADD): {
2147 		struct ib_atomic_eth *ateth;
2148 		struct rvt_ack_entry *e;
2149 		u64 vaddr;
2150 		atomic64_t *maddr;
2151 		u64 sdata;
2152 		u32 rkey;
2153 		u8 next;
2154 
2155 		if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC)))
2156 			goto nack_inv;
2157 		next = qp->r_head_ack_queue + 1;
2158 		if (next > QIB_MAX_RDMA_ATOMIC)
2159 			next = 0;
2160 		spin_lock_irqsave(&qp->s_lock, flags);
2161 		if (unlikely(next == qp->s_tail_ack_queue)) {
2162 			if (!qp->s_ack_queue[next].sent)
2163 				goto nack_inv_unlck;
2164 			qib_update_ack_queue(qp, next);
2165 		}
2166 		e = &qp->s_ack_queue[qp->r_head_ack_queue];
2167 		if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
2168 			rvt_put_mr(e->rdma_sge.mr);
2169 			e->rdma_sge.mr = NULL;
2170 		}
2171 		ateth = &ohdr->u.atomic_eth;
2172 		vaddr = get_ib_ateth_vaddr(ateth);
2173 		if (unlikely(vaddr & (sizeof(u64) - 1)))
2174 			goto nack_inv_unlck;
2175 		rkey = be32_to_cpu(ateth->rkey);
2176 		/* Check rkey & NAK */
2177 		if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64),
2178 					  vaddr, rkey,
2179 					  IB_ACCESS_REMOTE_ATOMIC)))
2180 			goto nack_acc_unlck;
2181 		/* Perform atomic OP and save result. */
2182 		maddr = (atomic64_t *) qp->r_sge.sge.vaddr;
2183 		sdata = get_ib_ateth_swap(ateth);
2184 		e->atomic_data = (opcode == OP(FETCH_ADD)) ?
2185 			(u64) atomic64_add_return(sdata, maddr) - sdata :
2186 			(u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
2187 				      get_ib_ateth_compare(ateth),
2188 				      sdata);
2189 		rvt_put_mr(qp->r_sge.sge.mr);
2190 		qp->r_sge.num_sge = 0;
2191 		e->opcode = opcode;
2192 		e->sent = 0;
2193 		e->psn = psn;
2194 		e->lpsn = psn;
2195 		qp->r_msn++;
2196 		qp->r_psn++;
2197 		qp->r_state = opcode;
2198 		qp->r_nak_state = 0;
2199 		qp->r_head_ack_queue = next;
2200 
2201 		/* Schedule the send tasklet. */
2202 		qp->s_flags |= RVT_S_RESP_PENDING;
2203 		qib_schedule_send(qp);
2204 
2205 		goto sunlock;
2206 	}
2207 
2208 	default:
2209 		/* NAK unknown opcodes. */
2210 		goto nack_inv;
2211 	}
2212 	qp->r_psn++;
2213 	qp->r_state = opcode;
2214 	qp->r_ack_psn = psn;
2215 	qp->r_nak_state = 0;
2216 	/* Send an ACK if requested or required. */
2217 	if (psn & (1 << 31))
2218 		goto send_ack;
2219 	return;
2220 
2221 rnr_nak:
2222 	qp->r_nak_state = IB_RNR_NAK | qp->r_min_rnr_timer;
2223 	qp->r_ack_psn = qp->r_psn;
2224 	/* Queue RNR NAK for later */
2225 	if (list_empty(&qp->rspwait)) {
2226 		qp->r_flags |= RVT_R_RSP_NAK;
2227 		rvt_get_qp(qp);
2228 		list_add_tail(&qp->rspwait, &rcd->qp_wait_list);
2229 	}
2230 	return;
2231 
2232 nack_op_err:
2233 	qib_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
2234 	qp->r_nak_state = IB_NAK_REMOTE_OPERATIONAL_ERROR;
2235 	qp->r_ack_psn = qp->r_psn;
2236 	/* Queue NAK for later */
2237 	if (list_empty(&qp->rspwait)) {
2238 		qp->r_flags |= RVT_R_RSP_NAK;
2239 		rvt_get_qp(qp);
2240 		list_add_tail(&qp->rspwait, &rcd->qp_wait_list);
2241 	}
2242 	return;
2243 
2244 nack_inv_unlck:
2245 	spin_unlock_irqrestore(&qp->s_lock, flags);
2246 nack_inv:
2247 	qib_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
2248 	qp->r_nak_state = IB_NAK_INVALID_REQUEST;
2249 	qp->r_ack_psn = qp->r_psn;
2250 	/* Queue NAK for later */
2251 	if (list_empty(&qp->rspwait)) {
2252 		qp->r_flags |= RVT_R_RSP_NAK;
2253 		rvt_get_qp(qp);
2254 		list_add_tail(&qp->rspwait, &rcd->qp_wait_list);
2255 	}
2256 	return;
2257 
2258 nack_acc_unlck:
2259 	spin_unlock_irqrestore(&qp->s_lock, flags);
2260 nack_acc:
2261 	qib_rc_error(qp, IB_WC_LOC_PROT_ERR);
2262 	qp->r_nak_state = IB_NAK_REMOTE_ACCESS_ERROR;
2263 	qp->r_ack_psn = qp->r_psn;
2264 send_ack:
2265 	qib_send_rc_ack(qp);
2266 	return;
2267 
2268 sunlock:
2269 	spin_unlock_irqrestore(&qp->s_lock, flags);
2270 }
2271