staging/rdma/hfi1: Add s_sendcontext priv field
authorJubin John <jubin.john@intel.com>
Sun, 14 Feb 2016 20:45:00 +0000 (12:45 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:38:12 +0000 (20:38 -0500)
s_sendcontext will be used to map the QPs to the send contexts
for PIO.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/qp.c
drivers/staging/rdma/hfi1/ud.c
drivers/staging/rdma/hfi1/verbs.h

index 7387ef5cd0698cd312155c199e2aa9d09e9b3def..571e78fa2633e4a5a320f70370c3b892a8525abb 100644 (file)
@@ -191,6 +191,9 @@ int hfi1_check_modify_qp(struct rvt_qp *qp, struct ib_qp_attr *attr,
                if (!qp_to_sdma_engine(qp, sc) &&
                    dd->flags & HFI1_HAS_SEND_DMA)
                        return -EINVAL;
+
+               if (!qp_to_send_context(qp, sc))
+                       return -EINVAL;
        }
 
        if (attr_mask & IB_QP_ALT_PATH) {
@@ -201,6 +204,9 @@ int hfi1_check_modify_qp(struct rvt_qp *qp, struct ib_qp_attr *attr,
                if (!qp_to_sdma_engine(qp, sc) &&
                    dd->flags & HFI1_HAS_SEND_DMA)
                        return -EINVAL;
+
+               if (!qp_to_send_context(qp, sc))
+                       return -EINVAL;
        }
 
        return 0;
@@ -608,11 +614,13 @@ void qp_iter_print(struct seq_file *s, struct qp_iter *iter)
        struct rvt_qp *qp = iter->qp;
        struct hfi1_qp_priv *priv = qp->priv;
        struct sdma_engine *sde;
+       struct send_context *send_context;
 
        sde = qp_to_sdma_engine(qp, priv->s_sc);
        wqe = rvt_get_swqe_ptr(qp, qp->s_last);
+       send_context = qp_to_send_context(qp, priv->s_sc);
        seq_printf(s,
-                  "N %d %s QP%u R %u %s %u %u %u f=%x %u %u %u %u %u PSN %x %x %x %x %x (%u %u %u %u %u %u %u) QP%u LID %x SL %u MTU %u %u %u %u SDE %p,%u\n",
+                  "N %d %s QP%u R %u %s %u %u %u f=%x %u %u %u %u %u PSN %x %x %x %x %x (%u %u %u %u %u %u %u) QP%u LID %x SL %u MTU %u %u %u %u SDE %p,%u SC %p\n",
                   iter->n,
                   qp_idle(qp) ? "I" : "B",
                   qp->ibqp.qp_num,
@@ -641,7 +649,8 @@ void qp_iter_print(struct seq_file *s, struct qp_iter *iter)
                   qp->s_retry_cnt,
                   qp->s_rnr_retry_cnt,
                   sde,
-                  sde ? sde->this_idx : 0);
+                  sde ? sde->this_idx : 0,
+                  send_context);
 }
 
 void qp_comm_est(struct rvt_qp *qp)
index a7118bca0d2ad8fcdf6cb4fedf30628890f0899d..1b4b191ced99be2fc36cab09eaeb4c86bad1b81d 100644 (file)
@@ -394,6 +394,7 @@ int hfi1_make_ud_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
                priv->s_sc = sc5;
        }
        priv->s_sde = qp_to_sdma_engine(qp, priv->s_sc);
+       priv->s_sendcontext = qp_to_send_context(qp, priv->s_sc);
        ps->s_txreq->phdr.hdr.lrh[0] = cpu_to_be16(lrh0);
        ps->s_txreq->phdr.hdr.lrh[1] = cpu_to_be16(ah_attr->dlid);
        ps->s_txreq->phdr.hdr.lrh[2] =
index 73f471ae1f573402ec7e2de1b169b4577861f8da..3d25ad406af7c880acd98e728e4bb13d030196bd 100644 (file)
@@ -199,10 +199,11 @@ struct hfi1_pio_header {
  * pair is made common
  */
 struct hfi1_qp_priv {
-       struct ahg_ib_header *s_hdr; /* next packet header to send */
-       struct sdma_engine *s_sde;   /* current sde */
-       u8 s_sc;                     /* SC[0..4] for next packet */
-       u8 r_adefered;               /* number of acks defered */
+       struct ahg_ib_header *s_hdr;              /* next header to send */
+       struct sdma_engine *s_sde;                /* current sde */
+       struct send_context *s_sendcontext;       /* current sendcontext */
+       u8 s_sc;                                  /* SC[0..4] for next packet */
+       u8 r_adefered;                            /* number of acks defered */
        struct iowait s_iowait;
        struct timer_list s_rnr_timer;
        struct rvt_qp *owner;