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()
231 int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags) in qib_make_ud_req() argument
233 struct qib_qp_priv *priv = qp->priv; in qib_make_ud_req()
247 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_NEXT_SEND_OK)) { in qib_make_ud_req()
248 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND)) in qib_make_ud_req()
251 if (qp->s_last == READ_ONCE(qp->s_head)) in qib_make_ud_req()
255 qp->s_flags |= RVT_S_WAIT_DMA; in qib_make_ud_req()
258 wqe = rvt_get_swqe_ptr(qp, qp->s_last); in qib_make_ud_req()
259 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR); in qib_make_ud_req()
264 if (qp->s_cur == READ_ONCE(qp->s_head)) in qib_make_ud_req()
267 wqe = rvt_get_swqe_ptr(qp, qp->s_cur); in qib_make_ud_req()
268 next_cur = qp->s_cur + 1; in qib_make_ud_req()
269 if (next_cur >= qp->s_size) in qib_make_ud_req()
273 ibp = to_iport(qp->ibqp.device, qp->port_num); in qib_make_ud_req()
295 qp->s_flags |= RVT_S_WAIT_DMA; in qib_make_ud_req()
298 qp->s_cur = next_cur; in qib_make_ud_req()
299 spin_unlock_irqrestore(&qp->s_lock, tflags); in qib_make_ud_req()
300 qib_ud_loopback(qp, wqe); in qib_make_ud_req()
301 spin_lock_irqsave(&qp->s_lock, tflags); in qib_make_ud_req()
303 rvt_send_complete(qp, wqe, IB_WC_SUCCESS); in qib_make_ud_req()
308 qp->s_cur = next_cur; in qib_make_ud_req()
313 qp->s_hdrwords = 7; in qib_make_ud_req()
314 qp->s_cur_size = wqe->length; in qib_make_ud_req()
315 qp->s_cur_sge = &qp->s_sge; in qib_make_ud_req()
316 qp->s_srate = rdma_ah_get_static_rate(ah_attr); in qib_make_ud_req()
317 qp->s_wqe = wqe; in qib_make_ud_req()
318 qp->s_sge.sge = wqe->sg_list[0]; in qib_make_ud_req()
319 qp->s_sge.sg_list = wqe->sg_list + 1; in qib_make_ud_req()
320 qp->s_sge.num_sge = wqe->wr.num_sge; in qib_make_ud_req()
321 qp->s_sge.total_len = wqe->length; in qib_make_ud_req()
325 qp->s_hdrwords += qib_make_grh(ibp, &priv->s_hdr->u.l.grh, in qib_make_ud_req()
327 qp->s_hdrwords, nwords); in qib_make_ud_req()
340 qp->s_hdrwords++; in qib_make_ud_req()
346 if (qp->ibqp.qp_type == IB_QPT_SMI) in qib_make_ud_req()
354 cpu_to_be16(qp->s_hdrwords + nwords + SIZE_OF_CRC); in qib_make_ud_req()
365 bth0 |= qp->ibqp.qp_type == IB_QPT_SMI ? QIB_DEFAULT_P_KEY : in qib_make_ud_req()
366 qib_get_pkey(ibp, qp->ibqp.qp_type == IB_QPT_GSI ? in qib_make_ud_req()
367 rvt_get_swqe_pkey_index(wqe) : qp->s_pkey_index); in qib_make_ud_req()
383 cpu_to_be32((int)rvt_get_swqe_remote_qkey(wqe) < 0 ? qp->qkey : in qib_make_ud_req()
385 ohdr->u.ud.deth[1] = cpu_to_be32(qp->ibqp.qp_num); in qib_make_ud_req()
390 qp->s_flags &= ~RVT_S_BUSY; in qib_make_ud_req()
428 int has_grh, void *data, u32 tlen, struct rvt_qp *qp) in qib_ud_rcv() argument
464 if (qp->ibqp.qp_num) { in qib_ud_rcv()
468 if (qp->ibqp.qp_num > 1) { in qib_ud_rcv()
472 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index); in qib_ud_rcv()
478 src_qp, qp->ibqp.qp_num, in qib_ud_rcv()
483 if (unlikely(qkey != qp->qkey)) in qib_ud_rcv()
487 if (unlikely(qp->ibqp.qp_num == 1 && in qib_ud_rcv()
509 if (qp->ibqp.qp_num > 1 && in qib_ud_rcv()
528 if (qp->r_flags & RVT_R_REUSE_SGE) in qib_ud_rcv()
529 qp->r_flags &= ~RVT_R_REUSE_SGE; in qib_ud_rcv()
533 ret = rvt_get_rwqe(qp, false); in qib_ud_rcv()
535 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR); in qib_ud_rcv()
539 if (qp->ibqp.qp_num == 0) in qib_ud_rcv()
545 if (unlikely(wc.byte_len > qp->r_len)) { in qib_ud_rcv()
546 qp->r_flags |= RVT_R_REUSE_SGE; in qib_ud_rcv()
550 rvt_copy_sge(qp, &qp->r_sge, &hdr->u.l.grh, in qib_ud_rcv()
554 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true); in qib_ud_rcv()
555 rvt_copy_sge(qp, &qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh), in qib_ud_rcv()
557 rvt_put_ss(&qp->r_sge); in qib_ud_rcv()
558 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags)) in qib_ud_rcv()
560 wc.wr_id = qp->r_wr_id; in qib_ud_rcv()
564 wc.qp = &qp->ibqp; in qib_ud_rcv()
566 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ? in qib_ud_rcv()
576 wc.port_num = qp->port_num; in qib_ud_rcv()
578 rvt_recv_cq(qp, &wc, ib_bth_is_solicited(ohdr)); in qib_ud_rcv()