Lines Matching refs:qp

44 void qib_migrate_qp(struct rvt_qp *qp)
48 qp->s_mig_state = IB_MIG_MIGRATED;
49 qp->remote_ah_attr = qp->alt_ah_attr;
50 qp->port_num = rdma_ah_get_port_num(&qp->alt_ah_attr);
51 qp->s_pkey_index = qp->s_alt_pkey_index;
53 ev.device = qp->ibqp.device;
54 ev.element.qp = &qp->ibqp;
56 qp->ibqp.event_handler(&ev, qp->ibqp.qp_context);
83 int has_grh, struct rvt_qp *qp, u32 bth0)
88 if (qp->s_mig_state == IB_MIG_ARMED && (bth0 & IB_BTH_MIG_REQ)) {
90 if (rdma_ah_get_ah_flags(&qp->alt_ah_attr) &
96 if (!(rdma_ah_get_ah_flags(&qp->alt_ah_attr) &
99 grh = rdma_ah_read_grh(&qp->alt_ah_attr);
110 qib_get_pkey(ibp, qp->s_alt_pkey_index))) {
114 0, qp->ibqp.qp_num,
120 rdma_ah_get_dlid(&qp->alt_ah_attr)) ||
122 rdma_ah_get_port_num(&qp->alt_ah_attr))
124 spin_lock_irqsave(&qp->s_lock, flags);
125 qib_migrate_qp(qp);
126 spin_unlock_irqrestore(&qp->s_lock, flags);
129 if (rdma_ah_get_ah_flags(&qp->remote_ah_attr) &
135 if (!(rdma_ah_get_ah_flags(&qp->remote_ah_attr) &
138 grh = rdma_ah_read_grh(&qp->remote_ah_attr);
149 qib_get_pkey(ibp, qp->s_pkey_index))) {
153 0, qp->ibqp.qp_num,
159 rdma_ah_get_dlid(&qp->remote_ah_attr) ||
160 ppd_from_ibp(ibp)->port != qp->port_num)
162 if (qp->s_mig_state == IB_MIG_REARM &&
164 qp->s_mig_state = IB_MIG_ARMED;
206 void qib_make_ruc_header(struct rvt_qp *qp, struct ib_other_headers *ohdr,
209 struct qib_qp_priv *priv = qp->priv;
210 struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
216 extra_bytes = -qp->s_cur_size & 3;
217 nwords = (qp->s_cur_size + extra_bytes) >> 2;
219 if (unlikely(rdma_ah_get_ah_flags(&qp->remote_ah_attr) & IB_AH_GRH)) {
220 qp->s_hdrwords +=
222 rdma_ah_read_grh(&qp->remote_ah_attr),
223 qp->s_hdrwords, nwords);
226 lrh0 |= ibp->sl_to_vl[rdma_ah_get_sl(&qp->remote_ah_attr)] << 12 |
227 rdma_ah_get_sl(&qp->remote_ah_attr) << 4;
230 cpu_to_be16(rdma_ah_get_dlid(&qp->remote_ah_attr));
232 cpu_to_be16(qp->s_hdrwords + nwords + SIZE_OF_CRC);
235 rdma_ah_get_path_bits(&qp->remote_ah_attr));
236 bth0 |= qib_get_pkey(ibp, qp->s_pkey_index);
238 if (qp->s_mig_state == IB_MIG_MIGRATED)
241 ohdr->bth[1] = cpu_to_be32(qp->remote_qpn);
250 struct rvt_qp *qp = priv->owner;
252 qib_do_send(qp);
257 * @qp: pointer to the QP
263 void qib_do_send(struct rvt_qp *qp)
265 struct qib_qp_priv *priv = qp->priv;
266 struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
268 int (*make_req)(struct rvt_qp *qp, unsigned long *flags);
271 if ((qp->ibqp.qp_type == IB_QPT_RC ||
272 qp->ibqp.qp_type == IB_QPT_UC) &&
273 (rdma_ah_get_dlid(&qp->remote_ah_attr) &
275 rvt_ruc_loopback(qp);
279 if (qp->ibqp.qp_type == IB_QPT_RC)
281 else if (qp->ibqp.qp_type == IB_QPT_UC)
286 spin_lock_irqsave(&qp->s_lock, flags);
289 if (!qib_send_ok(qp)) {
290 spin_unlock_irqrestore(&qp->s_lock, flags);
294 qp->s_flags |= RVT_S_BUSY;
298 if (qp->s_hdrwords != 0) {
299 spin_unlock_irqrestore(&qp->s_lock, flags);
304 if (qib_verbs_send(qp, priv->s_hdr, qp->s_hdrwords,
305 qp->s_cur_sge, qp->s_cur_size))
308 qp->s_hdrwords = 0;
309 spin_lock_irqsave(&qp->s_lock, flags);
311 } while (make_req(qp, &flags));
313 spin_unlock_irqrestore(&qp->s_lock, flags);