Lines Matching refs:qp
57 struct rvt_qp *qp; in qib_ud_loopback() local
67 qp = rvt_lookup_qpn(rdi, &ibp->rvp, rvt_get_swqe_remote_qpn(swqe)); in qib_ud_loopback()
68 if (!qp) { in qib_ud_loopback()
75 dqptype = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_loopback()
76 IB_QPT_UD : qp->ibqp.qp_type; in qib_ud_loopback()
79 !(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK)) { in qib_ud_loopback()
87 if (qp->ibqp.qp_num > 1) { in qib_ud_loopback()
93 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index); in qib_ud_loopback()
99 sqp->ibqp.qp_num, qp->ibqp.qp_num, in qib_ud_loopback()
111 if (qp->ibqp.qp_num) { in qib_ud_loopback()
116 if (unlikely(qkey != qp->qkey)) in qib_ud_loopback()
133 spin_lock_irqsave(&qp->r_lock, flags); in qib_ud_loopback()
138 if (qp->r_flags & RVT_R_REUSE_SGE) in qib_ud_loopback()
139 qp->r_flags &= ~RVT_R_REUSE_SGE; in qib_ud_loopback()
143 ret = rvt_get_rwqe(qp, false); in qib_ud_loopback()
145 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR); in qib_ud_loopback()
149 if (qp->ibqp.qp_num == 0) in qib_ud_loopback()
155 if (unlikely(wc.byte_len > qp->r_len)) { in qib_ud_loopback()
156 qp->r_flags |= RVT_R_REUSE_SGE; in qib_ud_loopback()
166 rvt_copy_sge(qp, &qp->r_sge, &grh, in qib_ud_loopback()
170 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true); in qib_ud_loopback()
178 rvt_copy_sge(qp, &qp->r_sge, sge->vaddr, len, true, false); in qib_ud_loopback()
198 rvt_put_ss(&qp->r_sge); in qib_ud_loopback()
199 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags)) in qib_ud_loopback()
201 wc.wr_id = qp->r_wr_id; in qib_ud_loopback()
204 wc.qp = &qp->ibqp; in qib_ud_loopback()
206 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_loopback()
212 wc.port_num = qp->port_num; in qib_ud_loopback()
214 rvt_recv_cq(qp, &wc, swqe->wr.send_flags & IB_SEND_SOLICITED); in qib_ud_loopback()
217 spin_unlock_irqrestore(&qp->r_lock, flags); in qib_ud_loopback()
230 int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags) in qib_make_ud_req() argument
232 struct qib_qp_priv *priv = qp->priv; in qib_make_ud_req()
246 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_NEXT_SEND_OK)) { in qib_make_ud_req()
247 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND)) in qib_make_ud_req()
250 if (qp->s_last == READ_ONCE(qp->s_head)) in qib_make_ud_req()
254 qp->s_flags |= RVT_S_WAIT_DMA; in qib_make_ud_req()
257 wqe = rvt_get_swqe_ptr(qp, qp->s_last); in qib_make_ud_req()
258 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR); in qib_make_ud_req()
263 if (qp->s_cur == READ_ONCE(qp->s_head)) in qib_make_ud_req()
266 wqe = rvt_get_swqe_ptr(qp, qp->s_cur); in qib_make_ud_req()
267 next_cur = qp->s_cur + 1; in qib_make_ud_req()
268 if (next_cur >= qp->s_size) in qib_make_ud_req()
272 ibp = to_iport(qp->ibqp.device, qp->port_num); in qib_make_ud_req()
294 qp->s_flags |= RVT_S_WAIT_DMA; in qib_make_ud_req()
297 qp->s_cur = next_cur; in qib_make_ud_req()
298 spin_unlock_irqrestore(&qp->s_lock, tflags); in qib_make_ud_req()
299 qib_ud_loopback(qp, wqe); in qib_make_ud_req()
300 spin_lock_irqsave(&qp->s_lock, tflags); in qib_make_ud_req()
302 rvt_send_complete(qp, wqe, IB_WC_SUCCESS); in qib_make_ud_req()
307 qp->s_cur = next_cur; in qib_make_ud_req()
312 qp->s_hdrwords = 7; in qib_make_ud_req()
313 qp->s_cur_size = wqe->length; in qib_make_ud_req()
314 qp->s_cur_sge = &qp->s_sge; in qib_make_ud_req()
315 qp->s_srate = rdma_ah_get_static_rate(ah_attr); in qib_make_ud_req()
316 qp->s_wqe = wqe; in qib_make_ud_req()
317 qp->s_sge.sge = wqe->sg_list[0]; in qib_make_ud_req()
318 qp->s_sge.sg_list = wqe->sg_list + 1; in qib_make_ud_req()
319 qp->s_sge.num_sge = wqe->wr.num_sge; in qib_make_ud_req()
320 qp->s_sge.total_len = wqe->length; in qib_make_ud_req()
324 qp->s_hdrwords += qib_make_grh(ibp, &priv->s_hdr->u.l.grh, in qib_make_ud_req()
326 qp->s_hdrwords, nwords); in qib_make_ud_req()
339 qp->s_hdrwords++; in qib_make_ud_req()
345 if (qp->ibqp.qp_type == IB_QPT_SMI) in qib_make_ud_req()
353 cpu_to_be16(qp->s_hdrwords + nwords + SIZE_OF_CRC); in qib_make_ud_req()
364 bth0 |= qp->ibqp.qp_type == IB_QPT_SMI ? QIB_DEFAULT_P_KEY : in qib_make_ud_req()
365 qib_get_pkey(ibp, qp->ibqp.qp_type == IB_QPT_GSI ? in qib_make_ud_req()
366 rvt_get_swqe_pkey_index(wqe) : qp->s_pkey_index); in qib_make_ud_req()
382 cpu_to_be32((int)rvt_get_swqe_remote_qkey(wqe) < 0 ? qp->qkey : in qib_make_ud_req()
384 ohdr->u.ud.deth[1] = cpu_to_be32(qp->ibqp.qp_num); in qib_make_ud_req()
389 qp->s_flags &= ~RVT_S_BUSY; in qib_make_ud_req()
427 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) in qib_ud_rcv() argument
463 if (qp->ibqp.qp_num) { in qib_ud_rcv()
467 if (qp->ibqp.qp_num > 1) { in qib_ud_rcv()
471 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index); in qib_ud_rcv()
477 src_qp, qp->ibqp.qp_num, in qib_ud_rcv()
482 if (unlikely(qkey != qp->qkey)) in qib_ud_rcv()
486 if (unlikely(qp->ibqp.qp_num == 1 && in qib_ud_rcv()
508 if (qp->ibqp.qp_num > 1 && in qib_ud_rcv()
527 if (qp->r_flags & RVT_R_REUSE_SGE) in qib_ud_rcv()
528 qp->r_flags &= ~RVT_R_REUSE_SGE; in qib_ud_rcv()
532 ret = rvt_get_rwqe(qp, false); in qib_ud_rcv()
534 rvt_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 |= RVT_R_REUSE_SGE; in qib_ud_rcv()
549 rvt_copy_sge(qp, &qp->r_sge, &hdr->u.l.grh, in qib_ud_rcv()
553 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true); in qib_ud_rcv()
554 rvt_copy_sge(qp, &qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh), in qib_ud_rcv()
556 rvt_put_ss(&qp->r_sge); in qib_ud_rcv()
557 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags)) in qib_ud_rcv()
559 wc.wr_id = qp->r_wr_id; in qib_ud_rcv()
563 wc.qp = &qp->ibqp; in qib_ud_rcv()
565 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_rcv()
575 wc.port_num = qp->port_num; in qib_ud_rcv()
577 rvt_recv_cq(qp, &wc, ib_bth_is_solicited(ohdr)); in qib_ud_rcv()