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/slab.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 
get_map_page(struct ipath_qp_table * qpt,struct qpn_map * map)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 
alloc_qpn(struct ipath_qp_table * qpt,enum ib_qp_type type)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 
free_qpn(struct ipath_qp_table * qpt,u32 qpn)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  */
ipath_alloc_qpn(struct ipath_qp_table * qpt,struct ipath_qp * qp,enum ib_qp_type type)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  */
ipath_free_qp(struct ipath_qp_table * qpt,struct ipath_qp * qp)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  */
ipath_free_all_qps(struct ipath_qp_table * qpt)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  */
ipath_lookup_qpn(struct ipath_qp_table * qpt,u32 qpn)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  */
ipath_reset_qp(struct ipath_qp * qp,enum ib_qp_type type)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 
ipath_error_qp(struct ipath_qp * qp,enum ib_wc_status err)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  */
ipath_modify_qp(struct ib_qp * ibqp,struct ib_qp_attr * attr,int attr_mask,struct ib_udata * udata)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, IB_LINK_LAYER_UNSPECIFIED))
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 
ipath_query_qp(struct ib_qp * ibqp,struct ib_qp_attr * attr,int attr_mask,struct ib_qp_init_attr * init_attr)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  */
ipath_compute_aeth(struct ipath_qp * qp)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  */
ipath_create_qp(struct ib_pd * ibpd,struct ib_qp_init_attr * init_attr,struct ib_udata * udata)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  */
ipath_destroy_qp(struct ib_qp * ibqp)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  */
ipath_init_qp_table(struct ipath_ibdev * idev,int size)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 = kcalloc(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  */
ipath_get_credit(struct ipath_qp * qp,u32 aeth)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 }
1080