Lines Matching refs:qp

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