headers: remove sched.h from interrupt.h
[safe/jmp/linux-2.6] / drivers / infiniband / hw / ipath / ipath_qp.c
1 /*
2  * Copyright (c) 2006, 2007, 2008 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/err.h>
35 #include <linux/sched.h>
36 #include <linux/vmalloc.h>
37
38 #include "ipath_verbs.h"
39 #include "ipath_kernel.h"
40
41 #define BITS_PER_PAGE           (PAGE_SIZE*BITS_PER_BYTE)
42 #define BITS_PER_PAGE_MASK      (BITS_PER_PAGE-1)
43 #define mk_qpn(qpt, map, off)   (((map) - (qpt)->map) * BITS_PER_PAGE + \
44                                  (off))
45 #define find_next_offset(map, off) find_next_zero_bit((map)->page, \
46                                                       BITS_PER_PAGE, off)
47
48 /*
49  * Convert the AETH credit code into the number of credits.
50  */
51 static u32 credit_table[31] = {
52         0,                      /* 0 */
53         1,                      /* 1 */
54         2,                      /* 2 */
55         3,                      /* 3 */
56         4,                      /* 4 */
57         6,                      /* 5 */
58         8,                      /* 6 */
59         12,                     /* 7 */
60         16,                     /* 8 */
61         24,                     /* 9 */
62         32,                     /* A */
63         48,                     /* B */
64         64,                     /* C */
65         96,                     /* D */
66         128,                    /* E */
67         192,                    /* F */
68         256,                    /* 10 */
69         384,                    /* 11 */
70         512,                    /* 12 */
71         768,                    /* 13 */
72         1024,                   /* 14 */
73         1536,                   /* 15 */
74         2048,                   /* 16 */
75         3072,                   /* 17 */
76         4096,                   /* 18 */
77         6144,                   /* 19 */
78         8192,                   /* 1A */
79         12288,                  /* 1B */
80         16384,                  /* 1C */
81         24576,                  /* 1D */
82         32768                   /* 1E */
83 };
84
85
86 static void get_map_page(struct ipath_qp_table *qpt, struct qpn_map *map)
87 {
88         unsigned long page = get_zeroed_page(GFP_KERNEL);
89         unsigned long flags;
90
91         /*
92          * Free the page if someone raced with us installing it.
93          */
94
95         spin_lock_irqsave(&qpt->lock, flags);
96         if (map->page)
97                 free_page(page);
98         else
99                 map->page = (void *)page;
100         spin_unlock_irqrestore(&qpt->lock, flags);
101 }
102
103
104 static int alloc_qpn(struct ipath_qp_table *qpt, enum ib_qp_type type)
105 {
106         u32 i, offset, max_scan, qpn;
107         struct qpn_map *map;
108         u32 ret = -1;
109
110         if (type == IB_QPT_SMI)
111                 ret = 0;
112         else if (type == IB_QPT_GSI)
113                 ret = 1;
114
115         if (ret != -1) {
116                 map = &qpt->map[0];
117                 if (unlikely(!map->page)) {
118                         get_map_page(qpt, map);
119                         if (unlikely(!map->page)) {
120                                 ret = -ENOMEM;
121                                 goto bail;
122                         }
123                 }
124                 if (!test_and_set_bit(ret, map->page))
125                         atomic_dec(&map->n_free);
126                 else
127                         ret = -EBUSY;
128                 goto bail;
129         }
130
131         qpn = qpt->last + 1;
132         if (qpn >= QPN_MAX)
133                 qpn = 2;
134         offset = qpn & BITS_PER_PAGE_MASK;
135         map = &qpt->map[qpn / BITS_PER_PAGE];
136         max_scan = qpt->nmaps - !offset;
137         for (i = 0;;) {
138                 if (unlikely(!map->page)) {
139                         get_map_page(qpt, map);
140                         if (unlikely(!map->page))
141                                 break;
142                 }
143                 if (likely(atomic_read(&map->n_free))) {
144                         do {
145                                 if (!test_and_set_bit(offset, map->page)) {
146                                         atomic_dec(&map->n_free);
147                                         qpt->last = qpn;
148                                         ret = qpn;
149                                         goto bail;
150                                 }
151                                 offset = find_next_offset(map, offset);
152                                 qpn = mk_qpn(qpt, map, offset);
153                                 /*
154                                  * This test differs from alloc_pidmap().
155                                  * If find_next_offset() does find a zero
156                                  * bit, we don't need to check for QPN
157                                  * wrapping around past our starting QPN.
158                                  * We just need to be sure we don't loop
159                                  * forever.
160                                  */
161                         } while (offset < BITS_PER_PAGE && qpn < QPN_MAX);
162                 }
163                 /*
164                  * In order to keep the number of pages allocated to a
165                  * minimum, we scan the all existing pages before increasing
166                  * the size of the bitmap table.
167                  */
168                 if (++i > max_scan) {
169                         if (qpt->nmaps == QPNMAP_ENTRIES)
170                                 break;
171                         map = &qpt->map[qpt->nmaps++];
172                         offset = 0;
173                 } else if (map < &qpt->map[qpt->nmaps]) {
174                         ++map;
175                         offset = 0;
176                 } else {
177                         map = &qpt->map[0];
178                         offset = 2;
179                 }
180                 qpn = mk_qpn(qpt, map, offset);
181         }
182
183         ret = -ENOMEM;
184
185 bail:
186         return ret;
187 }
188
189 static void free_qpn(struct ipath_qp_table *qpt, u32 qpn)
190 {
191         struct qpn_map *map;
192
193         map = qpt->map + qpn / BITS_PER_PAGE;
194         if (map->page)
195                 clear_bit(qpn & BITS_PER_PAGE_MASK, map->page);
196         atomic_inc(&map->n_free);
197 }
198
199 /**
200  * ipath_alloc_qpn - allocate a QP number
201  * @qpt: the QP table
202  * @qp: the QP
203  * @type: the QP type (IB_QPT_SMI and IB_QPT_GSI are special)
204  *
205  * Allocate the next available QPN and put the QP into the hash table.
206  * The hash table holds a reference to the QP.
207  */
208 static int ipath_alloc_qpn(struct ipath_qp_table *qpt, struct ipath_qp *qp,
209                            enum ib_qp_type type)
210 {
211         unsigned long flags;
212         int ret;
213
214         ret = alloc_qpn(qpt, type);
215         if (ret < 0)
216                 goto bail;
217         qp->ibqp.qp_num = ret;
218
219         /* Add the QP to the hash table. */
220         spin_lock_irqsave(&qpt->lock, flags);
221
222         ret %= qpt->max;
223         qp->next = qpt->table[ret];
224         qpt->table[ret] = qp;
225         atomic_inc(&qp->refcount);
226
227         spin_unlock_irqrestore(&qpt->lock, flags);
228         ret = 0;
229
230 bail:
231         return ret;
232 }
233
234 /**
235  * ipath_free_qp - remove a QP from the QP table
236  * @qpt: the QP table
237  * @qp: the QP to remove
238  *
239  * Remove the QP from the table so it can't be found asynchronously by
240  * the receive interrupt routine.
241  */
242 static void ipath_free_qp(struct ipath_qp_table *qpt, struct ipath_qp *qp)
243 {
244         struct ipath_qp *q, **qpp;
245         unsigned long flags;
246
247         spin_lock_irqsave(&qpt->lock, flags);
248
249         /* Remove QP from the hash table. */
250         qpp = &qpt->table[qp->ibqp.qp_num % qpt->max];
251         for (; (q = *qpp) != NULL; qpp = &q->next) {
252                 if (q == qp) {
253                         *qpp = qp->next;
254                         qp->next = NULL;
255                         atomic_dec(&qp->refcount);
256                         break;
257                 }
258         }
259
260         spin_unlock_irqrestore(&qpt->lock, flags);
261 }
262
263 /**
264  * ipath_free_all_qps - check for QPs still in use
265  * @qpt: the QP table to empty
266  *
267  * There should not be any QPs still in use.
268  * Free memory for table.
269  */
270 unsigned ipath_free_all_qps(struct ipath_qp_table *qpt)
271 {
272         unsigned long flags;
273         struct ipath_qp *qp;
274         u32 n, qp_inuse = 0;
275
276         spin_lock_irqsave(&qpt->lock, flags);
277         for (n = 0; n < qpt->max; n++) {
278                 qp = qpt->table[n];
279                 qpt->table[n] = NULL;
280
281                 for (; qp; qp = qp->next)
282                         qp_inuse++;
283         }
284         spin_unlock_irqrestore(&qpt->lock, flags);
285
286         for (n = 0; n < ARRAY_SIZE(qpt->map); n++)
287                 if (qpt->map[n].page)
288                         free_page((unsigned long) qpt->map[n].page);
289         return qp_inuse;
290 }
291
292 /**
293  * ipath_lookup_qpn - return the QP with the given QPN
294  * @qpt: the QP table
295  * @qpn: the QP number to look up
296  *
297  * The caller is responsible for decrementing the QP reference count
298  * when done.
299  */
300 struct ipath_qp *ipath_lookup_qpn(struct ipath_qp_table *qpt, u32 qpn)
301 {
302         unsigned long flags;
303         struct ipath_qp *qp;
304
305         spin_lock_irqsave(&qpt->lock, flags);
306
307         for (qp = qpt->table[qpn % qpt->max]; qp; qp = qp->next) {
308                 if (qp->ibqp.qp_num == qpn) {
309                         atomic_inc(&qp->refcount);
310                         break;
311                 }
312         }
313
314         spin_unlock_irqrestore(&qpt->lock, flags);
315         return qp;
316 }
317
318 /**
319  * ipath_reset_qp - initialize the QP state to the reset state
320  * @qp: the QP to reset
321  * @type: the QP type
322  */
323 static void ipath_reset_qp(struct ipath_qp *qp, enum ib_qp_type type)
324 {
325         qp->remote_qpn = 0;
326         qp->qkey = 0;
327         qp->qp_access_flags = 0;
328         atomic_set(&qp->s_dma_busy, 0);
329         qp->s_flags &= IPATH_S_SIGNAL_REQ_WR;
330         qp->s_hdrwords = 0;
331         qp->s_wqe = NULL;
332         qp->s_pkt_delay = 0;
333         qp->s_draining = 0;
334         qp->s_psn = 0;
335         qp->r_psn = 0;
336         qp->r_msn = 0;
337         if (type == IB_QPT_RC) {
338                 qp->s_state = IB_OPCODE_RC_SEND_LAST;
339                 qp->r_state = IB_OPCODE_RC_SEND_LAST;
340         } else {
341                 qp->s_state = IB_OPCODE_UC_SEND_LAST;
342                 qp->r_state = IB_OPCODE_UC_SEND_LAST;
343         }
344         qp->s_ack_state = IB_OPCODE_RC_ACKNOWLEDGE;
345         qp->r_nak_state = 0;
346         qp->r_aflags = 0;
347         qp->r_flags = 0;
348         qp->s_rnr_timeout = 0;
349         qp->s_head = 0;
350         qp->s_tail = 0;
351         qp->s_cur = 0;
352         qp->s_last = 0;
353         qp->s_ssn = 1;
354         qp->s_lsn = 0;
355         memset(qp->s_ack_queue, 0, sizeof(qp->s_ack_queue));
356         qp->r_head_ack_queue = 0;
357         qp->s_tail_ack_queue = 0;
358         qp->s_num_rd_atomic = 0;
359         if (qp->r_rq.wq) {
360                 qp->r_rq.wq->head = 0;
361                 qp->r_rq.wq->tail = 0;
362         }
363 }
364
365 /**
366  * ipath_error_qp - put a QP into the error state
367  * @qp: the QP to put into the error state
368  * @err: the receive completion error to signal if a RWQE is active
369  *
370  * Flushes both send and receive work queues.
371  * Returns true if last WQE event should be generated.
372  * The QP s_lock should be held and interrupts disabled.
373  * If we are already in error state, just return.
374  */
375
376 int ipath_error_qp(struct ipath_qp *qp, enum ib_wc_status err)
377 {
378         struct ipath_ibdev *dev = to_idev(qp->ibqp.device);
379         struct ib_wc wc;
380         int ret = 0;
381
382         if (qp->state == IB_QPS_ERR)
383                 goto bail;
384
385         qp->state = IB_QPS_ERR;
386
387         spin_lock(&dev->pending_lock);
388         if (!list_empty(&qp->timerwait))
389                 list_del_init(&qp->timerwait);
390         if (!list_empty(&qp->piowait))
391                 list_del_init(&qp->piowait);
392         spin_unlock(&dev->pending_lock);
393
394         /* Schedule the sending tasklet to drain the send work queue. */
395         if (qp->s_last != qp->s_head)
396                 ipath_schedule_send(qp);
397
398         memset(&wc, 0, sizeof(wc));
399         wc.qp = &qp->ibqp;
400         wc.opcode = IB_WC_RECV;
401
402         if (test_and_clear_bit(IPATH_R_WRID_VALID, &qp->r_aflags)) {
403                 wc.wr_id = qp->r_wr_id;
404                 wc.status = err;
405                 ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1);
406         }
407         wc.status = IB_WC_WR_FLUSH_ERR;
408
409         if (qp->r_rq.wq) {
410                 struct ipath_rwq *wq;
411                 u32 head;
412                 u32 tail;
413
414                 spin_lock(&qp->r_rq.lock);
415
416                 /* sanity check pointers before trusting them */
417                 wq = qp->r_rq.wq;
418                 head = wq->head;
419                 if (head >= qp->r_rq.size)
420                         head = 0;
421                 tail = wq->tail;
422                 if (tail >= qp->r_rq.size)
423                         tail = 0;
424                 while (tail != head) {
425                         wc.wr_id = get_rwqe_ptr(&qp->r_rq, tail)->wr_id;
426                         if (++tail >= qp->r_rq.size)
427                                 tail = 0;
428                         ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1);
429                 }
430                 wq->tail = tail;
431
432                 spin_unlock(&qp->r_rq.lock);
433         } else if (qp->ibqp.event_handler)
434                 ret = 1;
435
436 bail:
437         return ret;
438 }
439
440 /**
441  * ipath_modify_qp - modify the attributes of a queue pair
442  * @ibqp: the queue pair who's attributes we're modifying
443  * @attr: the new attributes
444  * @attr_mask: the mask of attributes to modify
445  * @udata: user data for ipathverbs.so
446  *
447  * Returns 0 on success, otherwise returns an errno.
448  */
449 int ipath_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
450                     int attr_mask, struct ib_udata *udata)
451 {
452         struct ipath_ibdev *dev = to_idev(ibqp->device);
453         struct ipath_qp *qp = to_iqp(ibqp);
454         enum ib_qp_state cur_state, new_state;
455         int lastwqe = 0;
456         int ret;
457
458         spin_lock_irq(&qp->s_lock);
459
460         cur_state = attr_mask & IB_QP_CUR_STATE ?
461                 attr->cur_qp_state : qp->state;
462         new_state = attr_mask & IB_QP_STATE ? attr->qp_state : cur_state;
463
464         if (!ib_modify_qp_is_ok(cur_state, new_state, ibqp->qp_type,
465                                 attr_mask))
466                 goto inval;
467
468         if (attr_mask & IB_QP_AV) {
469                 if (attr->ah_attr.dlid == 0 ||
470                     attr->ah_attr.dlid >= IPATH_MULTICAST_LID_BASE)
471                         goto inval;
472
473                 if ((attr->ah_attr.ah_flags & IB_AH_GRH) &&
474                     (attr->ah_attr.grh.sgid_index > 1))
475                         goto inval;
476         }
477
478         if (attr_mask & IB_QP_PKEY_INDEX)
479                 if (attr->pkey_index >= ipath_get_npkeys(dev->dd))
480                         goto inval;
481
482         if (attr_mask & IB_QP_MIN_RNR_TIMER)
483                 if (attr->min_rnr_timer > 31)
484                         goto inval;
485
486         if (attr_mask & IB_QP_PORT)
487                 if (attr->port_num == 0 ||
488                     attr->port_num > ibqp->device->phys_port_cnt)
489                         goto inval;
490
491         /*
492          * don't allow invalid Path MTU values or greater than 2048
493          * unless we are configured for a 4KB MTU
494          */
495         if ((attr_mask & IB_QP_PATH_MTU) &&
496                 (ib_mtu_enum_to_int(attr->path_mtu) == -1 ||
497                 (attr->path_mtu > IB_MTU_2048 && !ipath_mtu4096)))
498                 goto inval;
499
500         if (attr_mask & IB_QP_PATH_MIG_STATE)
501                 if (attr->path_mig_state != IB_MIG_MIGRATED &&
502                     attr->path_mig_state != IB_MIG_REARM)
503                         goto inval;
504
505         if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC)
506                 if (attr->max_dest_rd_atomic > IPATH_MAX_RDMA_ATOMIC)
507                         goto inval;
508
509         switch (new_state) {
510         case IB_QPS_RESET:
511                 if (qp->state != IB_QPS_RESET) {
512                         qp->state = IB_QPS_RESET;
513                         spin_lock(&dev->pending_lock);
514                         if (!list_empty(&qp->timerwait))
515                                 list_del_init(&qp->timerwait);
516                         if (!list_empty(&qp->piowait))
517                                 list_del_init(&qp->piowait);
518                         spin_unlock(&dev->pending_lock);
519                         qp->s_flags &= ~IPATH_S_ANY_WAIT;
520                         spin_unlock_irq(&qp->s_lock);
521                         /* Stop the sending tasklet */
522                         tasklet_kill(&qp->s_task);
523                         wait_event(qp->wait_dma, !atomic_read(&qp->s_dma_busy));
524                         spin_lock_irq(&qp->s_lock);
525                 }
526                 ipath_reset_qp(qp, ibqp->qp_type);
527                 break;
528
529         case IB_QPS_SQD:
530                 qp->s_draining = qp->s_last != qp->s_cur;
531                 qp->state = new_state;
532                 break;
533
534         case IB_QPS_SQE:
535                 if (qp->ibqp.qp_type == IB_QPT_RC)
536                         goto inval;
537                 qp->state = new_state;
538                 break;
539
540         case IB_QPS_ERR:
541                 lastwqe = ipath_error_qp(qp, IB_WC_WR_FLUSH_ERR);
542                 break;
543
544         default:
545                 qp->state = new_state;
546                 break;
547         }
548
549         if (attr_mask & IB_QP_PKEY_INDEX)
550                 qp->s_pkey_index = attr->pkey_index;
551
552         if (attr_mask & IB_QP_DEST_QPN)
553                 qp->remote_qpn = attr->dest_qp_num;
554
555         if (attr_mask & IB_QP_SQ_PSN) {
556                 qp->s_psn = qp->s_next_psn = attr->sq_psn;
557                 qp->s_last_psn = qp->s_next_psn - 1;
558         }
559
560         if (attr_mask & IB_QP_RQ_PSN)
561                 qp->r_psn = attr->rq_psn;
562
563         if (attr_mask & IB_QP_ACCESS_FLAGS)
564                 qp->qp_access_flags = attr->qp_access_flags;
565
566         if (attr_mask & IB_QP_AV) {
567                 qp->remote_ah_attr = attr->ah_attr;
568                 qp->s_dmult = ipath_ib_rate_to_mult(attr->ah_attr.static_rate);
569         }
570
571         if (attr_mask & IB_QP_PATH_MTU)
572                 qp->path_mtu = attr->path_mtu;
573
574         if (attr_mask & IB_QP_RETRY_CNT)
575                 qp->s_retry = qp->s_retry_cnt = attr->retry_cnt;
576
577         if (attr_mask & IB_QP_RNR_RETRY) {
578                 qp->s_rnr_retry = attr->rnr_retry;
579                 if (qp->s_rnr_retry > 7)
580                         qp->s_rnr_retry = 7;
581                 qp->s_rnr_retry_cnt = qp->s_rnr_retry;
582         }
583
584         if (attr_mask & IB_QP_MIN_RNR_TIMER)
585                 qp->r_min_rnr_timer = attr->min_rnr_timer;
586
587         if (attr_mask & IB_QP_TIMEOUT)
588                 qp->timeout = attr->timeout;
589
590         if (attr_mask & IB_QP_QKEY)
591                 qp->qkey = attr->qkey;
592
593         if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC)
594                 qp->r_max_rd_atomic = attr->max_dest_rd_atomic;
595
596         if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC)
597                 qp->s_max_rd_atomic = attr->max_rd_atomic;
598
599         spin_unlock_irq(&qp->s_lock);
600
601         if (lastwqe) {
602                 struct ib_event ev;
603
604                 ev.device = qp->ibqp.device;
605                 ev.element.qp = &qp->ibqp;
606                 ev.event = IB_EVENT_QP_LAST_WQE_REACHED;
607                 qp->ibqp.event_handler(&ev, qp->ibqp.qp_context);
608         }
609         ret = 0;
610         goto bail;
611
612 inval:
613         spin_unlock_irq(&qp->s_lock);
614         ret = -EINVAL;
615
616 bail:
617         return ret;
618 }
619
620 int ipath_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
621                    int attr_mask, struct ib_qp_init_attr *init_attr)
622 {
623         struct ipath_qp *qp = to_iqp(ibqp);
624
625         attr->qp_state = qp->state;
626         attr->cur_qp_state = attr->qp_state;
627         attr->path_mtu = qp->path_mtu;
628         attr->path_mig_state = 0;
629         attr->qkey = qp->qkey;
630         attr->rq_psn = qp->r_psn;
631         attr->sq_psn = qp->s_next_psn;
632         attr->dest_qp_num = qp->remote_qpn;
633         attr->qp_access_flags = qp->qp_access_flags;
634         attr->cap.max_send_wr = qp->s_size - 1;
635         attr->cap.max_recv_wr = qp->ibqp.srq ? 0 : qp->r_rq.size - 1;
636         attr->cap.max_send_sge = qp->s_max_sge;
637         attr->cap.max_recv_sge = qp->r_rq.max_sge;
638         attr->cap.max_inline_data = 0;
639         attr->ah_attr = qp->remote_ah_attr;
640         memset(&attr->alt_ah_attr, 0, sizeof(attr->alt_ah_attr));
641         attr->pkey_index = qp->s_pkey_index;
642         attr->alt_pkey_index = 0;
643         attr->en_sqd_async_notify = 0;
644         attr->sq_draining = qp->s_draining;
645         attr->max_rd_atomic = qp->s_max_rd_atomic;
646         attr->max_dest_rd_atomic = qp->r_max_rd_atomic;
647         attr->min_rnr_timer = qp->r_min_rnr_timer;
648         attr->port_num = 1;
649         attr->timeout = qp->timeout;
650         attr->retry_cnt = qp->s_retry_cnt;
651         attr->rnr_retry = qp->s_rnr_retry_cnt;
652         attr->alt_port_num = 0;
653         attr->alt_timeout = 0;
654
655         init_attr->event_handler = qp->ibqp.event_handler;
656         init_attr->qp_context = qp->ibqp.qp_context;
657         init_attr->send_cq = qp->ibqp.send_cq;
658         init_attr->recv_cq = qp->ibqp.recv_cq;
659         init_attr->srq = qp->ibqp.srq;
660         init_attr->cap = attr->cap;
661         if (qp->s_flags & IPATH_S_SIGNAL_REQ_WR)
662                 init_attr->sq_sig_type = IB_SIGNAL_REQ_WR;
663         else
664                 init_attr->sq_sig_type = IB_SIGNAL_ALL_WR;
665         init_attr->qp_type = qp->ibqp.qp_type;
666         init_attr->port_num = 1;
667         return 0;
668 }
669
670 /**
671  * ipath_compute_aeth - compute the AETH (syndrome + MSN)
672  * @qp: the queue pair to compute the AETH for
673  *
674  * Returns the AETH.
675  */
676 __be32 ipath_compute_aeth(struct ipath_qp *qp)
677 {
678         u32 aeth = qp->r_msn & IPATH_MSN_MASK;
679
680         if (qp->ibqp.srq) {
681                 /*
682                  * Shared receive queues don't generate credits.
683                  * Set the credit field to the invalid value.
684                  */
685                 aeth |= IPATH_AETH_CREDIT_INVAL << IPATH_AETH_CREDIT_SHIFT;
686         } else {
687                 u32 min, max, x;
688                 u32 credits;
689                 struct ipath_rwq *wq = qp->r_rq.wq;
690                 u32 head;
691                 u32 tail;
692
693                 /* sanity check pointers before trusting them */
694                 head = wq->head;
695                 if (head >= qp->r_rq.size)
696                         head = 0;
697                 tail = wq->tail;
698                 if (tail >= qp->r_rq.size)
699                         tail = 0;
700                 /*
701                  * Compute the number of credits available (RWQEs).
702                  * XXX Not holding the r_rq.lock here so there is a small
703                  * chance that the pair of reads are not atomic.
704                  */
705                 credits = head - tail;
706                 if ((int)credits < 0)
707                         credits += qp->r_rq.size;
708                 /*
709                  * Binary search the credit table to find the code to
710                  * use.
711                  */
712                 min = 0;
713                 max = 31;
714                 for (;;) {
715                         x = (min + max) / 2;
716                         if (credit_table[x] == credits)
717                                 break;
718                         if (credit_table[x] > credits)
719                                 max = x;
720                         else if (min == x)
721                                 break;
722                         else
723                                 min = x;
724                 }
725                 aeth |= x << IPATH_AETH_CREDIT_SHIFT;
726         }
727         return cpu_to_be32(aeth);
728 }
729
730 /**
731  * ipath_create_qp - create a queue pair for a device
732  * @ibpd: the protection domain who's device we create the queue pair for
733  * @init_attr: the attributes of the queue pair
734  * @udata: unused by InfiniPath
735  *
736  * Returns the queue pair on success, otherwise returns an errno.
737  *
738  * Called by the ib_create_qp() core verbs function.
739  */
740 struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
741                               struct ib_qp_init_attr *init_attr,
742                               struct ib_udata *udata)
743 {
744         struct ipath_qp *qp;
745         int err;
746         struct ipath_swqe *swq = NULL;
747         struct ipath_ibdev *dev;
748         size_t sz;
749         size_t sg_list_sz;
750         struct ib_qp *ret;
751
752         if (init_attr->create_flags) {
753                 ret = ERR_PTR(-EINVAL);
754                 goto bail;
755         }
756
757         if (init_attr->cap.max_send_sge > ib_ipath_max_sges ||
758             init_attr->cap.max_send_wr > ib_ipath_max_qp_wrs) {
759                 ret = ERR_PTR(-EINVAL);
760                 goto bail;
761         }
762
763         /* Check receive queue parameters if no SRQ is specified. */
764         if (!init_attr->srq) {
765                 if (init_attr->cap.max_recv_sge > ib_ipath_max_sges ||
766                     init_attr->cap.max_recv_wr > ib_ipath_max_qp_wrs) {
767                         ret = ERR_PTR(-EINVAL);
768                         goto bail;
769                 }
770                 if (init_attr->cap.max_send_sge +
771                     init_attr->cap.max_send_wr +
772                     init_attr->cap.max_recv_sge +
773                     init_attr->cap.max_recv_wr == 0) {
774                         ret = ERR_PTR(-EINVAL);
775                         goto bail;
776                 }
777         }
778
779         switch (init_attr->qp_type) {
780         case IB_QPT_UC:
781         case IB_QPT_RC:
782         case IB_QPT_UD:
783         case IB_QPT_SMI:
784         case IB_QPT_GSI:
785                 sz = sizeof(struct ipath_sge) *
786                         init_attr->cap.max_send_sge +
787                         sizeof(struct ipath_swqe);
788                 swq = vmalloc((init_attr->cap.max_send_wr + 1) * sz);
789                 if (swq == NULL) {
790                         ret = ERR_PTR(-ENOMEM);
791                         goto bail;
792                 }
793                 sz = sizeof(*qp);
794                 sg_list_sz = 0;
795                 if (init_attr->srq) {
796                         struct ipath_srq *srq = to_isrq(init_attr->srq);
797
798                         if (srq->rq.max_sge > 1)
799                                 sg_list_sz = sizeof(*qp->r_sg_list) *
800                                         (srq->rq.max_sge - 1);
801                 } else if (init_attr->cap.max_recv_sge > 1)
802                         sg_list_sz = sizeof(*qp->r_sg_list) *
803                                 (init_attr->cap.max_recv_sge - 1);
804                 qp = kmalloc(sz + sg_list_sz, GFP_KERNEL);
805                 if (!qp) {
806                         ret = ERR_PTR(-ENOMEM);
807                         goto bail_swq;
808                 }
809                 if (sg_list_sz && (init_attr->qp_type == IB_QPT_UD ||
810                     init_attr->qp_type == IB_QPT_SMI ||
811                     init_attr->qp_type == IB_QPT_GSI)) {
812                         qp->r_ud_sg_list = kmalloc(sg_list_sz, GFP_KERNEL);
813                         if (!qp->r_ud_sg_list) {
814                                 ret = ERR_PTR(-ENOMEM);
815                                 goto bail_qp;
816                         }
817                 } else
818                         qp->r_ud_sg_list = NULL;
819                 if (init_attr->srq) {
820                         sz = 0;
821                         qp->r_rq.size = 0;
822                         qp->r_rq.max_sge = 0;
823                         qp->r_rq.wq = NULL;
824                         init_attr->cap.max_recv_wr = 0;
825                         init_attr->cap.max_recv_sge = 0;
826                 } else {
827                         qp->r_rq.size = init_attr->cap.max_recv_wr + 1;
828                         qp->r_rq.max_sge = init_attr->cap.max_recv_sge;
829                         sz = (sizeof(struct ib_sge) * qp->r_rq.max_sge) +
830                                 sizeof(struct ipath_rwqe);
831                         qp->r_rq.wq = vmalloc_user(sizeof(struct ipath_rwq) +
832                                               qp->r_rq.size * sz);
833                         if (!qp->r_rq.wq) {
834                                 ret = ERR_PTR(-ENOMEM);
835                                 goto bail_sg_list;
836                         }
837                 }
838
839                 /*
840                  * ib_create_qp() will initialize qp->ibqp
841                  * except for qp->ibqp.qp_num.
842                  */
843                 spin_lock_init(&qp->s_lock);
844                 spin_lock_init(&qp->r_rq.lock);
845                 atomic_set(&qp->refcount, 0);
846                 init_waitqueue_head(&qp->wait);
847                 init_waitqueue_head(&qp->wait_dma);
848                 tasklet_init(&qp->s_task, ipath_do_send, (unsigned long)qp);
849                 INIT_LIST_HEAD(&qp->piowait);
850                 INIT_LIST_HEAD(&qp->timerwait);
851                 qp->state = IB_QPS_RESET;
852                 qp->s_wq = swq;
853                 qp->s_size = init_attr->cap.max_send_wr + 1;
854                 qp->s_max_sge = init_attr->cap.max_send_sge;
855                 if (init_attr->sq_sig_type == IB_SIGNAL_REQ_WR)
856                         qp->s_flags = IPATH_S_SIGNAL_REQ_WR;
857                 else
858                         qp->s_flags = 0;
859                 dev = to_idev(ibpd->device);
860                 err = ipath_alloc_qpn(&dev->qp_table, qp,
861                                       init_attr->qp_type);
862                 if (err) {
863                         ret = ERR_PTR(err);
864                         vfree(qp->r_rq.wq);
865                         goto bail_sg_list;
866                 }
867                 qp->ip = NULL;
868                 qp->s_tx = NULL;
869                 ipath_reset_qp(qp, init_attr->qp_type);
870                 break;
871
872         default:
873                 /* Don't support raw QPs */
874                 ret = ERR_PTR(-ENOSYS);
875                 goto bail;
876         }
877
878         init_attr->cap.max_inline_data = 0;
879
880         /*
881          * Return the address of the RWQ as the offset to mmap.
882          * See ipath_mmap() for details.
883          */
884         if (udata && udata->outlen >= sizeof(__u64)) {
885                 if (!qp->r_rq.wq) {
886                         __u64 offset = 0;
887
888                         err = ib_copy_to_udata(udata, &offset,
889                                                sizeof(offset));
890                         if (err) {
891                                 ret = ERR_PTR(err);
892                                 goto bail_ip;
893                         }
894                 } else {
895                         u32 s = sizeof(struct ipath_rwq) +
896                                 qp->r_rq.size * sz;
897
898                         qp->ip =
899                             ipath_create_mmap_info(dev, s,
900                                                    ibpd->uobject->context,
901                                                    qp->r_rq.wq);
902                         if (!qp->ip) {
903                                 ret = ERR_PTR(-ENOMEM);
904                                 goto bail_ip;
905                         }
906
907                         err = ib_copy_to_udata(udata, &(qp->ip->offset),
908                                                sizeof(qp->ip->offset));
909                         if (err) {
910                                 ret = ERR_PTR(err);
911                                 goto bail_ip;
912                         }
913                 }
914         }
915
916         spin_lock(&dev->n_qps_lock);
917         if (dev->n_qps_allocated == ib_ipath_max_qps) {
918                 spin_unlock(&dev->n_qps_lock);
919                 ret = ERR_PTR(-ENOMEM);
920                 goto bail_ip;
921         }
922
923         dev->n_qps_allocated++;
924         spin_unlock(&dev->n_qps_lock);
925
926         if (qp->ip) {
927                 spin_lock_irq(&dev->pending_lock);
928                 list_add(&qp->ip->pending_mmaps, &dev->pending_mmaps);
929                 spin_unlock_irq(&dev->pending_lock);
930         }
931
932         ret = &qp->ibqp;
933         goto bail;
934
935 bail_ip:
936         if (qp->ip)
937                 kref_put(&qp->ip->ref, ipath_release_mmap_info);
938         else
939                 vfree(qp->r_rq.wq);
940         ipath_free_qp(&dev->qp_table, qp);
941         free_qpn(&dev->qp_table, qp->ibqp.qp_num);
942 bail_sg_list:
943         kfree(qp->r_ud_sg_list);
944 bail_qp:
945         kfree(qp);
946 bail_swq:
947         vfree(swq);
948 bail:
949         return ret;
950 }
951
952 /**
953  * ipath_destroy_qp - destroy a queue pair
954  * @ibqp: the queue pair to destroy
955  *
956  * Returns 0 on success.
957  *
958  * Note that this can be called while the QP is actively sending or
959  * receiving!
960  */
961 int ipath_destroy_qp(struct ib_qp *ibqp)
962 {
963         struct ipath_qp *qp = to_iqp(ibqp);
964         struct ipath_ibdev *dev = to_idev(ibqp->device);
965
966         /* Make sure HW and driver activity is stopped. */
967         spin_lock_irq(&qp->s_lock);
968         if (qp->state != IB_QPS_RESET) {
969                 qp->state = IB_QPS_RESET;
970                 spin_lock(&dev->pending_lock);
971                 if (!list_empty(&qp->timerwait))
972                         list_del_init(&qp->timerwait);
973                 if (!list_empty(&qp->piowait))
974                         list_del_init(&qp->piowait);
975                 spin_unlock(&dev->pending_lock);
976                 qp->s_flags &= ~IPATH_S_ANY_WAIT;
977                 spin_unlock_irq(&qp->s_lock);
978                 /* Stop the sending tasklet */
979                 tasklet_kill(&qp->s_task);
980                 wait_event(qp->wait_dma, !atomic_read(&qp->s_dma_busy));
981         } else
982                 spin_unlock_irq(&qp->s_lock);
983
984         ipath_free_qp(&dev->qp_table, qp);
985
986         if (qp->s_tx) {
987                 atomic_dec(&qp->refcount);
988                 if (qp->s_tx->txreq.flags & IPATH_SDMA_TXREQ_F_FREEBUF)
989                         kfree(qp->s_tx->txreq.map_addr);
990                 spin_lock_irq(&dev->pending_lock);
991                 list_add(&qp->s_tx->txreq.list, &dev->txreq_free);
992                 spin_unlock_irq(&dev->pending_lock);
993                 qp->s_tx = NULL;
994         }
995
996         wait_event(qp->wait, !atomic_read(&qp->refcount));
997
998         /* all user's cleaned up, mark it available */
999         free_qpn(&dev->qp_table, qp->ibqp.qp_num);
1000         spin_lock(&dev->n_qps_lock);
1001         dev->n_qps_allocated--;
1002         spin_unlock(&dev->n_qps_lock);
1003
1004         if (qp->ip)
1005                 kref_put(&qp->ip->ref, ipath_release_mmap_info);
1006         else
1007                 vfree(qp->r_rq.wq);
1008         kfree(qp->r_ud_sg_list);
1009         vfree(qp->s_wq);
1010         kfree(qp);
1011         return 0;
1012 }
1013
1014 /**
1015  * ipath_init_qp_table - initialize the QP table for a device
1016  * @idev: the device who's QP table we're initializing
1017  * @size: the size of the QP table
1018  *
1019  * Returns 0 on success, otherwise returns an errno.
1020  */
1021 int ipath_init_qp_table(struct ipath_ibdev *idev, int size)
1022 {
1023         int i;
1024         int ret;
1025
1026         idev->qp_table.last = 1;        /* QPN 0 and 1 are special. */
1027         idev->qp_table.max = size;
1028         idev->qp_table.nmaps = 1;
1029         idev->qp_table.table = kzalloc(size * sizeof(*idev->qp_table.table),
1030                                        GFP_KERNEL);
1031         if (idev->qp_table.table == NULL) {
1032                 ret = -ENOMEM;
1033                 goto bail;
1034         }
1035
1036         for (i = 0; i < ARRAY_SIZE(idev->qp_table.map); i++) {
1037                 atomic_set(&idev->qp_table.map[i].n_free, BITS_PER_PAGE);
1038                 idev->qp_table.map[i].page = NULL;
1039         }
1040
1041         ret = 0;
1042
1043 bail:
1044         return ret;
1045 }
1046
1047 /**
1048  * ipath_get_credit - flush the send work queue of a QP
1049  * @qp: the qp who's send work queue to flush
1050  * @aeth: the Acknowledge Extended Transport Header
1051  *
1052  * The QP s_lock should be held.
1053  */
1054 void ipath_get_credit(struct ipath_qp *qp, u32 aeth)
1055 {
1056         u32 credit = (aeth >> IPATH_AETH_CREDIT_SHIFT) & IPATH_AETH_CREDIT_MASK;
1057
1058         /*
1059          * If the credit is invalid, we can send
1060          * as many packets as we like.  Otherwise, we have to
1061          * honor the credit field.
1062          */
1063         if (credit == IPATH_AETH_CREDIT_INVAL)
1064                 qp->s_lsn = (u32) -1;
1065         else if (qp->s_lsn != (u32) -1) {
1066                 /* Compute new LSN (i.e., MSN + credit) */
1067                 credit = (aeth + credit_table[credit]) & IPATH_MSN_MASK;
1068                 if (ipath_cmp24(credit, qp->s_lsn) > 0)
1069                         qp->s_lsn = credit;
1070         }
1071
1072         /* Restart sending if it was blocked due to lack of credits. */
1073         if ((qp->s_flags & IPATH_S_WAIT_SSN_CREDIT) &&
1074             qp->s_cur != qp->s_head &&
1075             (qp->s_lsn == (u32) -1 ||
1076              ipath_cmp24(get_swqe_ptr(qp, qp->s_cur)->ssn,
1077                          qp->s_lsn + 1) <= 0))
1078                 ipath_schedule_send(qp);
1079 }