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