Lines Matching refs:qp
53 struct qib_qp *qp; in qib_ud_loopback() local
61 qp = qib_lookup_qpn(ibp, swqe->wr.wr.ud.remote_qpn); in qib_ud_loopback()
62 if (!qp) { in qib_ud_loopback()
66 if (qp->ibqp.qp_type != sqp->ibqp.qp_type || in qib_ud_loopback()
67 !(ib_qib_state_ops[qp->state] & QIB_PROCESS_RECV_OK)) { in qib_ud_loopback()
75 if (qp->ibqp.qp_num > 1) { in qib_ud_loopback()
81 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index); in qib_ud_loopback()
87 sqp->ibqp.qp_num, qp->ibqp.qp_num, in qib_ud_loopback()
99 if (qp->ibqp.qp_num) { in qib_ud_loopback()
104 if (unlikely(qkey != qp->qkey)) { in qib_ud_loopback()
111 sqp->ibqp.qp_num, qp->ibqp.qp_num, in qib_ud_loopback()
131 spin_lock_irqsave(&qp->r_lock, flags); in qib_ud_loopback()
136 if (qp->r_flags & QIB_R_REUSE_SGE) in qib_ud_loopback()
137 qp->r_flags &= ~QIB_R_REUSE_SGE; in qib_ud_loopback()
141 ret = qib_get_rwqe(qp, 0); in qib_ud_loopback()
143 qib_rc_error(qp, IB_WC_LOC_QP_OP_ERR); in qib_ud_loopback()
147 if (qp->ibqp.qp_num == 0) in qib_ud_loopback()
153 if (unlikely(wc.byte_len > qp->r_len)) { in qib_ud_loopback()
154 qp->r_flags |= QIB_R_REUSE_SGE; in qib_ud_loopback()
160 qib_copy_sge(&qp->r_sge, &ah_attr->grh, in qib_ud_loopback()
164 qib_skip_sge(&qp->r_sge, sizeof(struct ib_grh), 1); in qib_ud_loopback()
177 qib_copy_sge(&qp->r_sge, sge->vaddr, len, 1); in qib_ud_loopback()
197 qib_put_ss(&qp->r_sge); in qib_ud_loopback()
198 if (!test_and_clear_bit(QIB_R_WRID_VALID, &qp->r_aflags)) in qib_ud_loopback()
200 wc.wr_id = qp->r_wr_id; in qib_ud_loopback()
203 wc.qp = &qp->ibqp; in qib_ud_loopback()
205 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_loopback()
210 wc.port_num = qp->port_num; in qib_ud_loopback()
212 qib_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, in qib_ud_loopback()
216 spin_unlock_irqrestore(&qp->r_lock, flags); in qib_ud_loopback()
218 if (atomic_dec_and_test(&qp->refcount)) in qib_ud_loopback()
219 wake_up(&qp->wait); in qib_ud_loopback()
228 int qib_make_ud_req(struct qib_qp *qp) in qib_make_ud_req() argument
244 spin_lock_irqsave(&qp->s_lock, flags); in qib_make_ud_req()
246 if (!(ib_qib_state_ops[qp->state] & QIB_PROCESS_NEXT_SEND_OK)) { in qib_make_ud_req()
247 if (!(ib_qib_state_ops[qp->state] & QIB_FLUSH_SEND)) in qib_make_ud_req()
250 if (qp->s_last == qp->s_head) in qib_make_ud_req()
253 if (atomic_read(&qp->s_dma_busy)) { in qib_make_ud_req()
254 qp->s_flags |= QIB_S_WAIT_DMA; in qib_make_ud_req()
257 wqe = get_swqe_ptr(qp, qp->s_last); in qib_make_ud_req()
258 qib_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR); in qib_make_ud_req()
262 if (qp->s_cur == qp->s_head) in qib_make_ud_req()
265 wqe = get_swqe_ptr(qp, qp->s_cur); in qib_make_ud_req()
266 next_cur = qp->s_cur + 1; in qib_make_ud_req()
267 if (next_cur >= qp->s_size) in qib_make_ud_req()
271 ibp = to_iport(qp->ibqp.device, qp->port_num); in qib_make_ud_req()
290 if (atomic_read(&qp->s_dma_busy)) { in qib_make_ud_req()
291 qp->s_flags |= QIB_S_WAIT_DMA; in qib_make_ud_req()
294 qp->s_cur = next_cur; in qib_make_ud_req()
295 spin_unlock_irqrestore(&qp->s_lock, flags); in qib_make_ud_req()
296 qib_ud_loopback(qp, wqe); in qib_make_ud_req()
297 spin_lock_irqsave(&qp->s_lock, flags); in qib_make_ud_req()
298 qib_send_complete(qp, wqe, IB_WC_SUCCESS); in qib_make_ud_req()
303 qp->s_cur = next_cur; in qib_make_ud_req()
308 qp->s_hdrwords = 7; in qib_make_ud_req()
309 qp->s_cur_size = wqe->length; in qib_make_ud_req()
310 qp->s_cur_sge = &qp->s_sge; in qib_make_ud_req()
311 qp->s_srate = ah_attr->static_rate; in qib_make_ud_req()
312 qp->s_wqe = wqe; in qib_make_ud_req()
313 qp->s_sge.sge = wqe->sg_list[0]; in qib_make_ud_req()
314 qp->s_sge.sg_list = wqe->sg_list + 1; in qib_make_ud_req()
315 qp->s_sge.num_sge = wqe->wr.num_sge; in qib_make_ud_req()
316 qp->s_sge.total_len = wqe->length; in qib_make_ud_req()
320 qp->s_hdrwords += qib_make_grh(ibp, &qp->s_hdr->u.l.grh, in qib_make_ud_req()
322 qp->s_hdrwords, nwords); in qib_make_ud_req()
324 ohdr = &qp->s_hdr->u.l.oth; in qib_make_ud_req()
332 ohdr = &qp->s_hdr->u.oth; in qib_make_ud_req()
335 qp->s_hdrwords++; in qib_make_ud_req()
341 if (qp->ibqp.qp_type == IB_QPT_SMI) in qib_make_ud_req()
345 qp->s_hdr->lrh[0] = cpu_to_be16(lrh0); in qib_make_ud_req()
346 qp->s_hdr->lrh[1] = cpu_to_be16(ah_attr->dlid); /* DEST LID */ in qib_make_ud_req()
347 qp->s_hdr->lrh[2] = cpu_to_be16(qp->s_hdrwords + nwords + SIZE_OF_CRC); in qib_make_ud_req()
351 qp->s_hdr->lrh[3] = cpu_to_be16(lid); in qib_make_ud_req()
353 qp->s_hdr->lrh[3] = IB_LID_PERMISSIVE; in qib_make_ud_req()
357 bth0 |= qp->ibqp.qp_type == IB_QPT_SMI ? QIB_DEFAULT_P_KEY : in qib_make_ud_req()
358 qib_get_pkey(ibp, qp->ibqp.qp_type == IB_QPT_GSI ? in qib_make_ud_req()
359 wqe->wr.wr.ud.pkey_index : qp->s_pkey_index); in qib_make_ud_req()
368 ohdr->bth[2] = cpu_to_be32(qp->s_next_psn++ & QIB_PSN_MASK); in qib_make_ud_req()
374 qp->qkey : wqe->wr.wr.ud.remote_qkey); in qib_make_ud_req()
375 ohdr->u.ud.deth[1] = cpu_to_be32(qp->ibqp.qp_num); in qib_make_ud_req()
382 qp->s_flags &= ~QIB_S_BUSY; in qib_make_ud_req()
384 spin_unlock_irqrestore(&qp->s_lock, flags); in qib_make_ud_req()
422 int has_grh, void *data, u32 tlen, struct qib_qp *qp) in qib_ud_rcv() argument
458 if (qp->ibqp.qp_num) { in qib_ud_rcv()
462 if (qp->ibqp.qp_num > 1) { in qib_ud_rcv()
466 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index); in qib_ud_rcv()
472 src_qp, qp->ibqp.qp_num, in qib_ud_rcv()
477 if (unlikely(qkey != qp->qkey)) { in qib_ud_rcv()
480 src_qp, qp->ibqp.qp_num, in qib_ud_rcv()
485 if (unlikely(qp->ibqp.qp_num == 1 && in qib_ud_rcv()
507 if (qp->ibqp.qp_num > 1 && in qib_ud_rcv()
527 if (qp->r_flags & QIB_R_REUSE_SGE) in qib_ud_rcv()
528 qp->r_flags &= ~QIB_R_REUSE_SGE; in qib_ud_rcv()
532 ret = qib_get_rwqe(qp, 0); in qib_ud_rcv()
534 qib_rc_error(qp, IB_WC_LOC_QP_OP_ERR); in qib_ud_rcv()
538 if (qp->ibqp.qp_num == 0) in qib_ud_rcv()
544 if (unlikely(wc.byte_len > qp->r_len)) { in qib_ud_rcv()
545 qp->r_flags |= QIB_R_REUSE_SGE; in qib_ud_rcv()
549 qib_copy_sge(&qp->r_sge, &hdr->u.l.grh, in qib_ud_rcv()
553 qib_skip_sge(&qp->r_sge, sizeof(struct ib_grh), 1); in qib_ud_rcv()
554 qib_copy_sge(&qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh), 1); in qib_ud_rcv()
555 qib_put_ss(&qp->r_sge); in qib_ud_rcv()
556 if (!test_and_clear_bit(QIB_R_WRID_VALID, &qp->r_aflags)) in qib_ud_rcv()
558 wc.wr_id = qp->r_wr_id; in qib_ud_rcv()
562 wc.qp = &qp->ibqp; in qib_ud_rcv()
564 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_rcv()
574 wc.port_num = qp->port_num; in qib_ud_rcv()
576 qib_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, in qib_ud_rcv()