Lines Matching refs:qp

50 #include "qp.h"
57 * @qp: a pointer to the QP
63 int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
65 struct hfi1_qp_priv *priv = qp->priv;
71 u32 pmtu = qp->pmtu;
74 ps->s_txreq = get_txreq(ps->dev, qp);
78 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) {
79 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
82 if (qp->s_last == READ_ONCE(qp->s_head))
86 qp->s_flags |= RVT_S_WAIT_DMA;
89 clear_ahg(qp);
90 wqe = rvt_get_swqe_ptr(qp, qp->s_last);
91 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR);
98 if (rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH)
105 if ((rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH) &&
106 (hfi1_check_mcast(rdma_ah_get_dlid(&qp->remote_ah_attr))))
113 wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
114 qp->s_wqe = NULL;
115 switch (qp->s_state) {
117 if (!(ib_rvt_state_ops[qp->state] &
121 if (qp->s_cur == READ_ONCE(qp->s_head)) {
122 clear_ahg(qp);
134 if (qp->s_last != qp->s_cur)
136 if (++qp->s_cur == qp->s_size)
137 qp->s_cur = 0;
140 qp, wqe->wr.ex.invalidate_rkey);
143 rvt_send_complete(qp, wqe, err ? IB_WC_LOC_PROT_ERR
146 atomic_dec(&qp->local_ops_pending);
152 qp->s_psn = wqe->psn;
153 qp->s_sge.sge = wqe->sg_list[0];
154 qp->s_sge.sg_list = wqe->sg_list + 1;
155 qp->s_sge.num_sge = wqe->wr.num_sge;
156 qp->s_sge.total_len = wqe->length;
158 qp->s_len = len;
163 qp->s_state = OP(SEND_FIRST);
168 qp->s_state = OP(SEND_ONLY);
170 qp->s_state =
178 qp->s_wqe = wqe;
179 if (++qp->s_cur >= qp->s_size)
180 qp->s_cur = 0;
192 qp->s_state = OP(RDMA_WRITE_FIRST);
197 qp->s_state = OP(RDMA_WRITE_ONLY);
199 qp->s_state =
207 qp->s_wqe = wqe;
208 if (++qp->s_cur >= qp->s_size)
209 qp->s_cur = 0;
218 qp->s_state = OP(SEND_MIDDLE);
221 len = qp->s_len;
228 qp->s_state = OP(SEND_LAST);
230 qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE);
237 qp->s_wqe = wqe;
238 if (++qp->s_cur >= qp->s_size)
239 qp->s_cur = 0;
243 qp->s_state = OP(RDMA_WRITE_MIDDLE);
246 len = qp->s_len;
253 qp->s_state = OP(RDMA_WRITE_LAST);
255 qp->s_state =
263 qp->s_wqe = wqe;
264 if (++qp->s_cur >= qp->s_size)
265 qp->s_cur = 0;
268 qp->s_len -= len;
271 ps->s_txreq->ss = &qp->s_sge;
273 hfi1_make_ruc_header(qp, ohdr, bth0 | (qp->s_state << 24),
274 qp->remote_qpn, mask_psn(qp->s_psn++),
288 qp->s_flags &= ~RVT_S_BUSY;
299 * @qp: the QP for this packet.
310 struct rvt_qp *qp = packet->qp;
317 u32 pmtu = qp->pmtu;
325 process_ecn(qp, packet);
329 if (unlikely(cmp_psn(psn, qp->r_psn) != 0)) {
334 qp->r_psn = psn;
336 if (qp->r_state == OP(SEND_FIRST) ||
337 qp->r_state == OP(SEND_MIDDLE)) {
338 set_bit(RVT_R_REWIND_SGE, &qp->r_aflags);
339 qp->r_sge.num_sge = 0;
341 rvt_put_ss(&qp->r_sge);
343 qp->r_state = OP(SEND_LAST);
361 switch (qp->r_state) {
389 if (qp->state == IB_QPS_RTR && !(qp->r_flags & RVT_R_COMM_EST))
390 rvt_comm_est(qp);
398 if (test_and_clear_bit(RVT_R_REWIND_SGE, &qp->r_aflags)) {
399 qp->r_sge = qp->s_rdma_read_sge;
401 ret = rvt_get_rwqe(qp, false);
407 * qp->s_rdma_read_sge will be the owner
410 qp->s_rdma_read_sge = qp->r_sge;
412 qp->r_rcv_len = 0;
427 qp->r_rcv_len += pmtu;
428 if (unlikely(qp->r_rcv_len > qp->r_len))
430 rvt_copy_sge(qp, &qp->r_sge, data, pmtu, false, false);
449 wc.byte_len = tlen + qp->r_rcv_len;
450 if (unlikely(wc.byte_len > qp->r_len))
453 rvt_copy_sge(qp, &qp->r_sge, data, tlen, false, false);
454 rvt_put_ss(&qp->s_rdma_read_sge);
456 wc.wr_id = qp->r_wr_id;
458 wc.qp = &qp->ibqp;
459 wc.src_qp = qp->remote_qpn;
460 wc.slid = rdma_ah_get_dlid(&qp->remote_ah_attr) & U16_MAX;
472 wc.sl = rdma_ah_get_sl(&qp->remote_ah_attr);
479 rvt_recv_cq(qp, &wc, ib_bth_is_solicited(ohdr));
486 if (unlikely(!(qp->qp_access_flags &
491 qp->r_len = be32_to_cpu(reth->length);
492 qp->r_rcv_len = 0;
493 qp->r_sge.sg_list = NULL;
494 if (qp->r_len != 0) {
500 ok = rvt_rkey_ok(qp, &qp->r_sge.sge, qp->r_len,
504 qp->r_sge.num_sge = 1;
506 qp->r_sge.num_sge = 0;
507 qp->r_sge.sge.mr = NULL;
508 qp->r_sge.sge.vaddr = NULL;
509 qp->r_sge.sge.length = 0;
510 qp->r_sge.sge.sge_length = 0;
523 qp->r_rcv_len += pmtu;
524 if (unlikely(qp->r_rcv_len > qp->r_len))
526 rvt_copy_sge(qp, &qp->r_sge, data, pmtu, true, false);
540 if (unlikely(tlen + qp->r_rcv_len != qp->r_len))
542 if (test_and_clear_bit(RVT_R_REWIND_SGE, &qp->r_aflags)) {
543 rvt_put_ss(&qp->s_rdma_read_sge);
545 ret = rvt_get_rwqe(qp, true);
551 wc.byte_len = qp->r_len;
553 rvt_copy_sge(qp, &qp->r_sge, data, tlen, true, false);
554 rvt_put_ss(&qp->r_sge);
565 if (unlikely(tlen + qp->r_rcv_len != qp->r_len))
567 rvt_copy_sge(qp, &qp->r_sge, data, tlen, true, false);
568 rvt_put_ss(&qp->r_sge);
575 qp->r_psn++;
576 qp->r_state = opcode;
580 set_bit(RVT_R_REWIND_SGE, &qp->r_aflags);
581 qp->r_sge.num_sge = 0;
587 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);