Lines Matching refs:qp

57 	struct rvt_qp *qp;
67 qp = rvt_lookup_qpn(rdi, &ibp->rvp, rvt_get_swqe_remote_qpn(swqe));
68 if (!qp) {
75 dqptype = qp->ibqp.qp_type == IB_QPT_GSI ?
76 IB_QPT_UD : qp->ibqp.qp_type;
79 !(ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK)) {
87 if (qp->ibqp.qp_num > 1) {
93 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index);
99 sqp->ibqp.qp_num, qp->ibqp.qp_num,
111 if (qp->ibqp.qp_num) {
116 if (unlikely(qkey != qp->qkey))
133 spin_lock_irqsave(&qp->r_lock, flags);
138 if (qp->r_flags & RVT_R_REUSE_SGE)
139 qp->r_flags &= ~RVT_R_REUSE_SGE;
143 ret = rvt_get_rwqe(qp, false);
145 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
149 if (qp->ibqp.qp_num == 0)
155 if (unlikely(wc.byte_len > qp->r_len)) {
156 qp->r_flags |= RVT_R_REUSE_SGE;
166 rvt_copy_sge(qp, &qp->r_sge, &grh,
170 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true);
178 rvt_copy_sge(qp, &qp->r_sge, sge->vaddr, len, true, false);
198 rvt_put_ss(&qp->r_sge);
199 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
201 wc.wr_id = qp->r_wr_id;
204 wc.qp = &qp->ibqp;
206 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ?
212 wc.port_num = qp->port_num;
214 rvt_recv_cq(qp, &wc, swqe->wr.send_flags & IB_SEND_SOLICITED);
217 spin_unlock_irqrestore(&qp->r_lock, flags);
224 * @qp: the QP
231 int qib_make_ud_req(struct rvt_qp *qp, unsigned long *flags)
233 struct qib_qp_priv *priv = qp->priv;
247 if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_NEXT_SEND_OK)) {
248 if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
251 if (qp->s_last == READ_ONCE(qp->s_head))
255 qp->s_flags |= RVT_S_WAIT_DMA;
258 wqe = rvt_get_swqe_ptr(qp, qp->s_last);
259 rvt_send_complete(qp, wqe, IB_WC_WR_FLUSH_ERR);
264 if (qp->s_cur == READ_ONCE(qp->s_head))
267 wqe = rvt_get_swqe_ptr(qp, qp->s_cur);
268 next_cur = qp->s_cur + 1;
269 if (next_cur >= qp->s_size)
273 ibp = to_iport(qp->ibqp.device, qp->port_num);
295 qp->s_flags |= RVT_S_WAIT_DMA;
298 qp->s_cur = next_cur;
299 spin_unlock_irqrestore(&qp->s_lock, tflags);
300 qib_ud_loopback(qp, wqe);
301 spin_lock_irqsave(&qp->s_lock, tflags);
303 rvt_send_complete(qp, wqe, IB_WC_SUCCESS);
308 qp->s_cur = next_cur;
313 qp->s_hdrwords = 7;
314 qp->s_cur_size = wqe->length;
315 qp->s_cur_sge = &qp->s_sge;
316 qp->s_srate = rdma_ah_get_static_rate(ah_attr);
317 qp->s_wqe = wqe;
318 qp->s_sge.sge = wqe->sg_list[0];
319 qp->s_sge.sg_list = wqe->sg_list + 1;
320 qp->s_sge.num_sge = wqe->wr.num_sge;
321 qp->s_sge.total_len = wqe->length;
325 qp->s_hdrwords += qib_make_grh(ibp, &priv->s_hdr->u.l.grh,
327 qp->s_hdrwords, nwords);
340 qp->s_hdrwords++;
346 if (qp->ibqp.qp_type == IB_QPT_SMI)
354 cpu_to_be16(qp->s_hdrwords + nwords + SIZE_OF_CRC);
365 bth0 |= qp->ibqp.qp_type == IB_QPT_SMI ? QIB_DEFAULT_P_KEY :
366 qib_get_pkey(ibp, qp->ibqp.qp_type == IB_QPT_GSI ?
367 rvt_get_swqe_pkey_index(wqe) : qp->s_pkey_index);
383 cpu_to_be32((int)rvt_get_swqe_remote_qkey(wqe) < 0 ? qp->qkey :
385 ohdr->u.ud.deth[1] = cpu_to_be32(qp->ibqp.qp_num);
390 qp->s_flags &= ~RVT_S_BUSY;
421 * @qp: the QP the packet came on
428 int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
464 if (qp->ibqp.qp_num) {
468 if (qp->ibqp.qp_num > 1) {
472 pkey2 = qib_get_pkey(ibp, qp->s_pkey_index);
478 src_qp, qp->ibqp.qp_num,
483 if (unlikely(qkey != qp->qkey))
487 if (unlikely(qp->ibqp.qp_num == 1 &&
509 if (qp->ibqp.qp_num > 1 &&
528 if (qp->r_flags & RVT_R_REUSE_SGE)
529 qp->r_flags &= ~RVT_R_REUSE_SGE;
533 ret = rvt_get_rwqe(qp, false);
535 rvt_rc_error(qp, IB_WC_LOC_QP_OP_ERR);
539 if (qp->ibqp.qp_num == 0)
545 if (unlikely(wc.byte_len > qp->r_len)) {
546 qp->r_flags |= RVT_R_REUSE_SGE;
550 rvt_copy_sge(qp, &qp->r_sge, &hdr->u.l.grh,
554 rvt_skip_sge(&qp->r_sge, sizeof(struct ib_grh), true);
555 rvt_copy_sge(qp, &qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh),
557 rvt_put_ss(&qp->r_sge);
558 if (!test_and_clear_bit(RVT_R_WRID_VALID, &qp->r_aflags))
560 wc.wr_id = qp->r_wr_id;
564 wc.qp = &qp->ibqp;
566 wc.pkey_index = qp->ibqp.qp_type == IB_QPT_GSI ?
576 wc.port_num = qp->port_num;
578 rvt_recv_cq(qp, &wc, ib_bth_is_solicited(ohdr));