IB/hfi1: Create inline to get extended headers
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Fri, 14 Jun 2019 16:32:38 +0000 (12:32 -0400)
committerDoug Ledford <dledford@redhat.com>
Tue, 18 Jun 2019 01:15:40 +0000 (21:15 -0400)
This paves the way for another patch that reacts to a
flush sdma completion for RC.

Fixes: 81cd3891f021 ("IB/hfi1: Add support for 16B Management Packets")
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/hfi.h
drivers/infiniband/hw/hfi1/rc.c

index b458c21..fa45350 100644 (file)
@@ -539,6 +539,37 @@ static inline void hfi1_16B_set_qpn(struct opa_16b_mgmt *mgmt,
        mgmt->src_qpn = cpu_to_be32(src_qp & OPA_16B_MGMT_QPN_MASK);
 }
 
+/**
+ * hfi1_get_rc_ohdr - get extended header
+ * @opah - the opaheader
+ */
+static inline struct ib_other_headers *
+hfi1_get_rc_ohdr(struct hfi1_opa_header *opah)
+{
+       struct ib_other_headers *ohdr;
+       struct ib_header *hdr = NULL;
+       struct hfi1_16b_header *hdr_16b = NULL;
+
+       /* Find out where the BTH is */
+       if (opah->hdr_type == HFI1_PKT_TYPE_9B) {
+               hdr = &opah->ibh;
+               if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
+                       ohdr = &hdr->u.oth;
+               else
+                       ohdr = &hdr->u.l.oth;
+       } else {
+               u8 l4;
+
+               hdr_16b = &opah->opah;
+               l4  = hfi1_16B_get_l4(hdr_16b);
+               if (l4 == OPA_16B_L4_IB_LOCAL)
+                       ohdr = &hdr_16b->u.oth;
+               else
+                       ohdr = &hdr_16b->u.l.oth;
+       }
+       return ohdr;
+}
+
 struct rvt_sge_state;
 
 /*
index a922edc..707a4c5 100644 (file)
@@ -1709,8 +1709,6 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
        struct ib_other_headers *ohdr;
        struct hfi1_qp_priv *priv = qp->priv;
        struct rvt_swqe *wqe;
-       struct ib_header *hdr = NULL;
-       struct hfi1_16b_header *hdr_16b = NULL;
        u32 opcode, head, tail;
        u32 psn;
        struct tid_rdma_request *req;
@@ -1719,24 +1717,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
        if (!(ib_rvt_state_ops[qp->state] & RVT_SEND_OR_FLUSH_OR_RECV_OK))
                return;
 
-       /* Find out where the BTH is */
-       if (priv->hdr_type == HFI1_PKT_TYPE_9B) {
-               hdr = &opah->ibh;
-               if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
-                       ohdr = &hdr->u.oth;
-               else
-                       ohdr = &hdr->u.l.oth;
-       } else {
-               u8 l4;
-
-               hdr_16b = &opah->opah;
-               l4  = hfi1_16B_get_l4(hdr_16b);
-               if (l4 == OPA_16B_L4_IB_LOCAL)
-                       ohdr = &hdr_16b->u.oth;
-               else
-                       ohdr = &hdr_16b->u.l.oth;
-       }
-
+       ohdr = hfi1_get_rc_ohdr(opah);
        opcode = ib_bth_get_opcode(ohdr);
        if ((opcode >= OP(RDMA_READ_RESPONSE_FIRST) &&
             opcode <= OP(ATOMIC_ACKNOWLEDGE)) ||