staging/rdma/hfi1: Fix header size calculation for RC/UC QPs with GRH enabled
authorJianxin Xiong <jianxin.xiong@intel.com>
Fri, 26 Feb 2016 21:33:13 +0000 (13:33 -0800)
committerDoug Ledford <dledford@redhat.com>
Fri, 11 Mar 2016 01:45:45 +0000 (20:45 -0500)
There is a header size counter in both the QP struture and the txreq
structure. The counter in the txreq structure is not updated properly
for RC and UC queue pairs with GRH enabled, and thus causing SDMA
send to fail. This patch fixes the RC and UC path.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Reviewed-by: Dean Luick <dean.luick@intel.com>
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Jianxin Xiong <jianxin.xiong@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/rc.c
drivers/staging/rdma/hfi1/uc.c

index 8caad18ba57e98634cbbaa1275f6222ba910646e..1ce0e08378b4fcd3b5df9cfd053ad2b75a762da2 100644 (file)
@@ -358,11 +358,11 @@ normal:
        }
        qp->s_rdma_ack_cnt++;
        qp->s_hdrwords = hwords;
-       /* pbc */
-       ps->s_txreq->hdr_dwords = hwords + 2;
        ps->s_txreq->sde = priv->s_sde;
        qp->s_cur_size = len;
        hfi1_make_ruc_header(qp, ohdr, bth0, bth2, middle, ps);
+       /* pbc */
+       ps->s_txreq->hdr_dwords = qp->s_hdrwords + 2;
        return 1;
 
 bail:
@@ -763,8 +763,6 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
        }
        qp->s_len -= len;
        qp->s_hdrwords = hwords;
-       /* pbc */
-       ps->s_txreq->hdr_dwords = hwords + 2;
        ps->s_txreq->sde = priv->s_sde;
        qp->s_cur_sge = ss;
        qp->s_cur_size = len;
@@ -775,6 +773,8 @@ int hfi1_make_rc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
                bth2,
                middle,
                ps);
+       /* pbc */
+       ps->s_txreq->hdr_dwords = qp->s_hdrwords + 2;
        return 1;
 
 done_free_tx:
index 5ba29affa43f52e0b72f93b0ad9ec361caa337d0..df773d4332970bd2ed2e9567d59fcf55c397f0cd 100644 (file)
@@ -239,13 +239,13 @@ int hfi1_make_uc_req(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
        }
        qp->s_len -= len;
        qp->s_hdrwords = hwords;
-       /* pbc */
-       ps->s_txreq->hdr_dwords = qp->s_hdrwords + 2;
        ps->s_txreq->sde = priv->s_sde;
        qp->s_cur_sge = &qp->s_sge;
        qp->s_cur_size = len;
        hfi1_make_ruc_header(qp, ohdr, bth0 | (qp->s_state << 24),
                             mask_psn(qp->s_psn++), middle, ps);
+       /* pbc */
+       ps->s_txreq->hdr_dwords = qp->s_hdrwords + 2;
        return 1;
 
 done_free_tx: