Lines Matching refs:qp

13 #include "qp.h"
36 struct rvt_qp *qp;
47 qp = rvt_lookup_qpn(ib_to_rvt(sqp->ibqp.device), &ibp->rvp,
49 if (!qp) {
57 dqptype = qp->ibqp.qp_type == IB_QPT_GSI ?
58 IB_QPT_UD : qp->ibqp.qp_type;
61 !(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK)) {
69 if (qp->ibqp.qp_num > 1) {
78 qp->s_pkey_index,
82 sqp->ibqp.qp_num, qp->ibqp.qp_num,
93 if (qp->ibqp.qp_num) {
98 if (unlikely(qkey != qp->qkey))
115 spin_lock_irqsave(&qp->r_lock, flags);
120 if (qp->r_flags & RVT_R_REUSE_SGE) {
121 qp->r_flags &= ~RVT_R_REUSE_SGE;
125 ret = rvt_get_rwqe(qp, false);
127 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
131 if (qp->ibqp.qp_num == 0)
137 if (unlikely(wc.byte_len > qp->r_len)) {
138 qp->r_flags |= RVT_R_REUSE_SGE;
172 rvt_copy_sge(qp, &qp->r_sge, &grh,
176 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true);
186 rvt_copy_sge(qp, &qp->r_sge, sge->vaddr, len, true, false);
190 rvt_put_ss(&qp->r_sge);
191 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
193 wc.wr_id = qp->r_wr_id;
196 wc.qp = &qp->ibqp;
198 if (qp->ibqp.qp_type == IB_QPT_GSI || qp->ibqp.qp_type == IB_QPT_SMI) {
214 wc.port_num = qp->port_num;
216 rvt_recv_cq(qp, &wc, swqe->wr.send_flags & IB_SEND_SOLICITED);
219 spin_unlock_irqrestore(&qp->r_lock, flags);
224 static void hfi1_make_bth_deth(struct rvt_qp *qp, struct rvt_swqe *wqe,
231 ibp = to_iport(qp->ibqp.device, qp->port_num);
242 if (qp->ibqp.qp_type == IB_QPT_GSI || qp->ibqp.qp_type == IB_QPT_SMI)
245 *pkey = hfi1_get_pkey(ibp, qp->s_pkey_index);
256 cpu_to_be32((int)rvt_get_swqe_remote_qkey(wqe) < 0 ? qp->qkey :
258 ohdr->u.ud.deth[1] = cpu_to_be32(qp->ibqp.qp_num);
261 void hfi1_make_ud_req_9B(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
268 struct hfi1_qp_priv *priv = qp->priv;
275 ibp = to_iport(qp->ibqp.device, qp->port_num);
301 if (qp->ibqp.qp_type == IB_QPT_SMI) {
323 hfi1_make_bth_deth(qp, wqe, ohdr, &pkey, extra_bytes, false);
332 void hfi1_make_ud_req_16B(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
335 struct hfi1_qp_priv *priv = qp->priv;
342 u32 src_qp = qp->ibqp.qp_num;
347 ibp = to_iport(qp->ibqp.device, qp->port_num);
397 if (qp->ibqp.qp_type == IB_QPT_SMI)
415 hfi1_make_bth_deth(qp, wqe, ohdr, &pkey, extra_bytes, true);
428 * @qp: the QP
435 int hfi1_make_ud_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
437 struct hfi1_qp_priv *priv = qp->priv;
445 ps->s_txreq = get_txreq(ps->dev, qp);
449 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_NEXT_SEND_OK)) {
450 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
453 if (qp->s_last == READ_ONCE(qp->s_head))
457 qp->s_flags |= RVT_S_WAIT_DMA;
460 wqe = rvt_get_swqe_ptr(qp, qp->s_last);
461 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR);
466 if (qp->s_cur == READ_ONCE(qp->s_head))
469 wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
470 next_cur = qp->s_cur + 1;
471 if (next_cur >= qp->s_size)
475 ibp = to_iport(qp->ibqp.device, qp->port_num);
485 (qp->ibqp.qp_type == IB_QPT_GSI))))) {
495 qp->s_flags |= RVT_S_WAIT_DMA;
498 qp->s_cur = next_cur;
499 spin_unlock_irqrestore(&qp->s_lock, tflags);
500 ud_loopback(qp, wqe);
501 spin_lock_irqsave(&qp->s_lock, tflags);
503 rvt_send_complete(qp, wqe, IB_WC_SUCCESS);
508 qp->s_cur = next_cur;
510 ps->s_txreq->ss = &qp->s_sge;
511 qp->s_srate = rdma_ah_get_static_rate(ah_attr);
512 qp->srate_mbps = ib_rate_to_mbps(qp->s_srate);
513 qp->s_wqe = wqe;
514 qp->s_sge.sge = wqe->sg_list[0];
515 qp->s_sge.sg_list = wqe->sg_list + 1;
516 qp->s_sge.num_sge = wqe->wr.num_sge;
517 qp->s_sge.total_len = wqe->length;
520 hfi1_make_ud_req_tbl[priv->hdr_type](qp, ps, qp->s_wqe);
521 priv->s_sde = qp_to_sdma_engine(qp, priv->s_sc);
523 priv->s_sendcontext = qp_to_send_context(qp, priv->s_sc);
542 qp->s_flags &= ~RVT_S_BUSY;
591 void return_cnp_16B(struct hfi1_ibport *ibp, struct rvt_qp *qp,
602 struct send_context *ctxt = qp_to_send_context(qp, sc5);
642 pbc = create_pbc(ppd, pbc_flags, qp->srate_mbps, vl, plen);
653 void return_cnp(struct hfi1_ibport *ibp, struct rvt_qp *qp, u32 remote_qpn,
664 struct send_context *ctxt = qp_to_send_context(qp, sc5);
697 pbc = create_pbc(ppd, pbc_flags, qp->srate_mbps, vl, plen);
727 struct rvt_qp *qp, u16 slid, struct opa_smp *smp)
819 struct rvt_qp *qp = packet->qp;
856 process_ecn(qp, packet);
870 if (qp->ibqp.qp_num) {
873 if (qp->ibqp.qp_num > 1) {
883 src_qp, qp->ibqp.qp_num,
894 ib_get_qkey(packet->ohdr) != qp->qkey))
898 if (unlikely(qp->ibqp.qp_num == 1 &&
905 if (opa_smp_check(ibp, pkey, sc5, qp, slid, smp))
920 if (qp->ibqp.qp_num > 1 &&
940 if (qp->r_flags & RVT_R_REUSE_SGE) {
941 qp->r_flags &= ~RVT_R_REUSE_SGE;
945 ret = rvt_get_rwqe(qp, false);
947 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
951 if (qp->ibqp.qp_num == 0)
957 if (unlikely(wc.byte_len > qp->r_len)) {
958 qp->r_flags |= RVT_R_REUSE_SGE;
962 rvt_copy_sge(qp, &qp->r_sge, packet->grh,
973 rvt_copy_sge(qp, &qp->r_sge, &grh,
977 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true);
979 rvt_copy_sge(qp, &qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh),
981 rvt_put_ss(&qp->r_sge);
982 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
984 wc.wr_id = qp->r_wr_id;
988 wc.qp = &qp->ibqp;
991 if (qp->ibqp.qp_type == IB_QPT_GSI ||
992 qp->ibqp.qp_type == IB_QPT_SMI) {
998 qp->ibqp.qp_type);
1016 wc.port_num = qp->port_num;
1018 rvt_recv_cq(qp, &wc, solicited);