RDMA/ocrdma: FRMA code cleanup
authorNaresh Gottumukkala <bgottumukkala@emulex.com>
Mon, 26 Aug 2013 09:57:43 +0000 (15:27 +0530)
committerRoland Dreier <roland@purestorage.com>
Tue, 3 Sep 2013 04:17:56 +0000 (21:17 -0700)
1) Fixed setting FR_MR bit for FRWR stag allocation
2) Access rights are passsed during FRWR stage and not during STAT allocation stage
3) FRWR WQE structure cleanup
4) Add QP level signaled bit.

Signed-off-by: Naresh Gottumukkala <bgottumukkala@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/ocrdma/ocrdma.h
drivers/infiniband/hw/ocrdma/ocrdma_hw.c
drivers/infiniband/hw/ocrdma/ocrdma_sli.h
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c

index 9cc966ab3b5a95889eb3c84a611255f0f9949c6f..1c8ba4cefcbaa1fb5f952a60425f37c439d91e6a 100644 (file)
@@ -289,6 +289,7 @@ struct ocrdma_qp {
        u32 qkey;
        bool dpp_enabled;
        u8 *ird_q_va;
+       bool signaled;
        u16 db_cache;
 };
 
index 2c2991b7dae09c49b5a7bf69ee238655f558503b..16ce664dc466927642d4740e4101cd2305c2778b 100644 (file)
@@ -1500,6 +1500,7 @@ static int ocrdma_mbx_reg_mr(struct ocrdma_dev *dev, struct ocrdma_hw_mr *hwmr,
                return -ENOMEM;
        cmd->num_pbl_pdid =
            pdid | (hwmr->num_pbls << OCRDMA_REG_NSMR_NUM_PBL_SHIFT);
+       cmd->fr_mr = hwmr->fr_mr;
 
        cmd->flags_hpage_pbe_sz |= (hwmr->remote_wr <<
                                    OCRDMA_REG_NSMR_REMOTE_WR_SHIFT);
@@ -2049,6 +2050,7 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
            (ah_attr->grh.traffic_class << OCRDMA_QP_PARAMS_TCLASS_SHIFT);
        cmd->params.rnt_rc_sl_fl |=
            (ah_attr->grh.flow_label & OCRDMA_QP_PARAMS_FLOW_LABEL_MASK);
+       cmd->params.rnt_rc_sl_fl |= (ah_attr->sl << OCRDMA_QP_PARAMS_SL_SHIFT);
        cmd->params.hop_lmt_rq_psn |=
            (ah_attr->grh.hop_limit << OCRDMA_QP_PARAMS_HOP_LMT_SHIFT);
        cmd->flags |= OCRDMA_QP_PARA_FLOW_LBL_VALID;
index bfd0acb5659d38ae6a613ee9802c9c2aaad35272..d1a9fb72a4bde9401f1cbdc4e7131f0b4b8d9972 100644 (file)
@@ -143,8 +143,11 @@ enum {
 # 2: 16K Bytes
 # 3: 32K Bytes
 # 4: 64K Bytes
+# 5: 128K Bytes
+# 6: 256K Bytes
+# 7: 512K Bytes
 */
-#define OCRDMA_MAX_Q_PAGE_SIZE_CNT (5)
+#define OCRDMA_MAX_Q_PAGE_SIZE_CNT (8)
 #define OCRDMA_Q_PAGE_BASE_SIZE (OCRDMA_MIN_Q_PAGE_SIZE * OCRDMA_MAX_Q_PAGES)
 
 #define MAX_OCRDMA_QP_PAGES      (8)
@@ -1274,7 +1277,7 @@ struct ocrdma_reg_nsmr {
        struct ocrdma_mqe_hdr hdr;
        struct ocrdma_mbx_hdr cmd;
 
-       u32 lrkey_key_index;
+       u32 fr_mr;
        u32 num_pbl_pdid;
        u32 flags_hpage_pbe_sz;
        u32 totlen_low;
@@ -1611,12 +1614,6 @@ struct ocrdma_ewqe_ud_hdr {
        u32 rsvd;
 };
 
-#define OCRDMA_MAX_FR_PBES 11
-struct ocrdma_fr_pbe {
-       u32 pa_hi;
-       u32 pa_lo;
-};
-
 /* extended wqe followed by hdr_wqe for Fast Memory register */
 struct ocrdma_ewqe_fr {
        u32 va_hi;
@@ -1625,7 +1622,8 @@ struct ocrdma_ewqe_fr {
        u32 fbo_lo;
        u32 size_sge;
        u32 num_sges;
-       struct ocrdma_fr_pbe pbe[0];
+       u32 rsvd;
+       u32 rsvd2;
 };
 
 struct ocrdma_eth_basic {
index 9e1d8c6bde52b51e7610540078b2f02cf49cb5e3..3e80f65f42a3bb9544ecdf0169165c33140ca0e8 100644 (file)
@@ -82,7 +82,8 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr)
                                        IB_DEVICE_RC_RNR_NAK_GEN |
                                        IB_DEVICE_SHUTDOWN_PORT |
                                        IB_DEVICE_SYS_IMAGE_GUID |
-                                       IB_DEVICE_LOCAL_DMA_LKEY;
+                                       IB_DEVICE_LOCAL_DMA_LKEY |
+                                       IB_DEVICE_MEM_MGT_EXTENSIONS;
        attr->max_sge = min(dev->attr.max_send_sge, dev->attr.max_srq_sge);
        attr->max_sge_rd = dev->attr.max_rdma_sge;
        attr->max_cq = dev->attr.max_cq;
@@ -1015,6 +1016,7 @@ static void ocrdma_set_qp_init_params(struct ocrdma_qp *qp,
        qp->sq.max_sges = attrs->cap.max_send_sge;
        qp->rq.max_sges = attrs->cap.max_recv_sge;
        qp->state = OCRDMA_QPS_RST;
+       qp->signaled = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR) ? true : false;
 }
 
 
@@ -1864,7 +1866,7 @@ int ocrdma_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
                }
                hdr = ocrdma_hwq_head(&qp->sq);
                hdr->cw = 0;
-               if (wr->send_flags & IB_SEND_SIGNALED)
+               if (wr->send_flags & IB_SEND_SIGNALED || qp->signaled)
                        hdr->cw |= (OCRDMA_FLAG_SIG << OCRDMA_WQE_FLAGS_SHIFT);
                if (wr->send_flags & IB_SEND_FENCE)
                        hdr->cw |=
@@ -1918,7 +1920,7 @@ int ocrdma_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
                        *bad_wr = wr;
                        break;
                }
-               if (wr->send_flags & IB_SEND_SIGNALED)
+               if (wr->send_flags & IB_SEND_SIGNALED || qp->signaled)
                        qp->wqe_wr_id_tbl[qp->sq.head].signaled = 1;
                else
                        qp->wqe_wr_id_tbl[qp->sq.head].signaled = 0;