Lines Matching refs:qp
8 #include "qp.h"
15 * @qp: a pointer to the QP
22 int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
24 struct hfi1_qp_priv *priv = qp->priv;
30 u32 pmtu = qp->pmtu;
33 ps->s_txreq = get_txreq(ps->dev, qp);
37 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) {
38 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
41 if (qp->s_last == READ_ONCE(qp->s_head))
45 qp->s_flags |= RVT_S_WAIT_DMA;
48 clear_ahg(qp);
49 wqe = rvt_get_swqe_ptr(qp, qp->s_last);
50 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR);
57 if (rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH)
64 if ((rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH) &&
65 (hfi1_check_mcast(rdma_ah_get_dlid(&qp->remote_ah_attr))))
72 wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
73 qp->s_wqe = NULL;
74 switch (qp->s_state) {
76 if (!(ib_rvt_state_ops[qp->state] &
80 if (qp->s_cur == READ_ONCE(qp->s_head)) {
81 clear_ahg(qp);
93 if (qp->s_last != qp->s_cur)
95 if (++qp->s_cur == qp->s_size)
96 qp->s_cur = 0;
99 qp, wqe->wr.ex.invalidate_rkey);
102 rvt_send_complete(qp, wqe, err ? IB_WC_LOC_PROT_ERR
105 atomic_dec(&qp->local_ops_pending);
111 qp->s_psn = wqe->psn;
112 qp->s_sge.sge = wqe->sg_list[0];
113 qp->s_sge.sg_list = wqe->sg_list + 1;
114 qp->s_sge.num_sge = wqe->wr.num_sge;
115 qp->s_sge.total_len = wqe->length;
117 qp->s_len = len;
122 qp->s_state = OP(SEND_FIRST);
127 qp->s_state = OP(SEND_ONLY);
129 qp->s_state =
137 qp->s_wqe = wqe;
138 if (++qp->s_cur >= qp->s_size)
139 qp->s_cur = 0;
151 qp->s_state = OP(RDMA_WRITE_FIRST);
156 qp->s_state = OP(RDMA_WRITE_ONLY);
158 qp->s_state =
166 qp->s_wqe = wqe;
167 if (++qp->s_cur >= qp->s_size)
168 qp->s_cur = 0;
177 qp->s_state = OP(SEND_MIDDLE);
180 len = qp->s_len;
187 qp->s_state = OP(SEND_LAST);
189 qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE);
196 qp->s_wqe = wqe;
197 if (++qp->s_cur >= qp->s_size)
198 qp->s_cur = 0;
202 qp->s_state = OP(RDMA_WRITE_MIDDLE);
205 len = qp->s_len;
212 qp->s_state = OP(RDMA_WRITE_LAST);
214 qp->s_state =
222 qp->s_wqe = wqe;
223 if (++qp->s_cur >= qp->s_size)
224 qp->s_cur = 0;
227 qp->s_len -= len;
230 ps->s_txreq->ss = &qp->s_sge;
232 hfi1_make_ruc_header(qp, ohdr, bth0 | (qp->s_state << 24),
233 qp->remote_qpn, mask_psn(qp->s_psn++),
247 qp->s_flags &= ~RVT_S_BUSY;
264 struct rvt_qp *qp = packet->qp;
271 u32 pmtu = qp->pmtu;
279 process_ecn(qp, packet);
283 if (unlikely(cmp_psn(psn, qp->r_psn) != 0)) {
288 qp->r_psn = psn;
290 if (qp->r_state == OP(SEND_FIRST) ||
291 qp->r_state == OP(SEND_MIDDLE)) {
292 set_bit(RVT_R_REWIND_SGE, &qp->r_aflags);
293 qp->r_sge.num_sge = 0;
295 rvt_put_ss(&qp->r_sge);
297 qp->r_state = OP(SEND_LAST);
315 switch (qp->r_state) {
343 if (qp->state == IB_QPS_RTR && !(qp->r_flags & RVT_R_COMM_EST))
344 rvt_comm_est(qp);
352 if (test_and_clear_bit(RVT_R_REWIND_SGE, &qp->r_aflags)) {
353 qp->r_sge = qp->s_rdma_read_sge;
355 ret = rvt_get_rwqe(qp, false);
361 * qp->s_rdma_read_sge will be the owner
364 qp->s_rdma_read_sge = qp->r_sge;
366 qp->r_rcv_len = 0;
381 qp->r_rcv_len += pmtu;
382 if (unlikely(qp->r_rcv_len > qp->r_len))
384 rvt_copy_sge(qp, &qp->r_sge, data, pmtu, false, false);
403 wc.byte_len = tlen + qp->r_rcv_len;
404 if (unlikely(wc.byte_len > qp->r_len))
407 rvt_copy_sge(qp, &qp->r_sge, data, tlen, false, false);
408 rvt_put_ss(&qp->s_rdma_read_sge);
410 wc.wr_id = qp->r_wr_id;
412 wc.qp = &qp->ibqp;
413 wc.src_qp = qp->remote_qpn;
414 wc.slid = rdma_ah_get_dlid(&qp->remote_ah_attr) & U16_MAX;
426 wc.sl = rdma_ah_get_sl(&qp->remote_ah_attr);
433 rvt_recv_cq(qp, &wc, ib_bth_is_solicited(ohdr));
440 if (unlikely(!(qp->qp_access_flags &
445 qp->r_len = be32_to_cpu(reth->length);
446 qp->r_rcv_len = 0;
447 qp->r_sge.sg_list = NULL;
448 if (qp->r_len != 0) {
454 ok = rvt_rkey_ok(qp, &qp->r_sge.sge, qp->r_len,
458 qp->r_sge.num_sge = 1;
460 qp->r_sge.num_sge = 0;
461 qp->r_sge.sge.mr = NULL;
462 qp->r_sge.sge.vaddr = NULL;
463 qp->r_sge.sge.length = 0;
464 qp->r_sge.sge.sge_length = 0;
477 qp->r_rcv_len += pmtu;
478 if (unlikely(qp->r_rcv_len > qp->r_len))
480 rvt_copy_sge(qp, &qp->r_sge, data, pmtu, true, false);
494 if (unlikely(tlen + qp->r_rcv_len != qp->r_len))
496 if (test_and_clear_bit(RVT_R_REWIND_SGE, &qp->r_aflags)) {
497 rvt_put_ss(&qp->s_rdma_read_sge);
499 ret = rvt_get_rwqe(qp, true);
505 wc.byte_len = qp->r_len;
507 rvt_copy_sge(qp, &qp->r_sge, data, tlen, true, false);
508 rvt_put_ss(&qp->r_sge);
519 if (unlikely(tlen + qp->r_rcv_len != qp->r_len))
521 rvt_copy_sge(qp, &qp->r_sge, data, tlen, true, false);
522 rvt_put_ss(&qp->r_sge);
529 qp->r_psn++;
530 qp->r_state = opcode;
534 set_bit(RVT_R_REWIND_SGE, &qp->r_aflags);
535 qp->r_sge.num_sge = 0;
541 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);