IB/hfi1: Use context pointer rather than context index
authorMichael J. Ruhl <michael.j.ruhl@intel.com>
Mon, 24 Jul 2017 14:46:01 +0000 (07:46 -0700)
committerDoug Ledford <dledford@redhat.com>
Mon, 31 Jul 2017 19:17:55 +0000 (15:17 -0400)
The hfi1_<set|clear>_ctxt_<j|p>key functions take a context index and
look up the context based on that index.

Since the context index is being retrieved from the context, this
doesn't seem optimal.

Pass the context pointer for use, rather than the context index.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/chip.c
drivers/infiniband/hw/hfi1/chip.h
drivers/infiniband/hw/hfi1/file_ops.c

index 06a79a268d2ea9aef3c3edeedf87020c24a4d73f..2f747023444b49f96ae9a574aaf9a5f1b05ab54c 100644 (file)
@@ -14542,99 +14542,86 @@ static void init_txe(struct hfi1_devdata *dd)
                write_csr(dd, SEND_CM_TIMER_CTRL, HFI1_CREDIT_RETURN_RATE);
 }
 
-int hfi1_set_ctxt_jkey(struct hfi1_devdata *dd, u16 ctxt, u16 jkey)
+int hfi1_set_ctxt_jkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd,
+                      u16 jkey)
 {
-       struct hfi1_ctxtdata *rcd = dd->rcd[ctxt];
-       unsigned sctxt;
-       int ret = 0;
+       u8 hw_ctxt;
        u64 reg;
 
-       if (!rcd || !rcd->sc) {
-               ret = -EINVAL;
-               goto done;
-       }
-       sctxt = rcd->sc->hw_context;
+       if (!rcd || !rcd->sc)
+               return -EINVAL;
+
+       hw_ctxt = rcd->sc->hw_context;
        reg = SEND_CTXT_CHECK_JOB_KEY_MASK_SMASK | /* mask is always 1's */
                ((jkey & SEND_CTXT_CHECK_JOB_KEY_VALUE_MASK) <<
                 SEND_CTXT_CHECK_JOB_KEY_VALUE_SHIFT);
        /* JOB_KEY_ALLOW_PERMISSIVE is not allowed by default */
        if (HFI1_CAP_KGET_MASK(rcd->flags, ALLOW_PERM_JKEY))
                reg |= SEND_CTXT_CHECK_JOB_KEY_ALLOW_PERMISSIVE_SMASK;
-       write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_JOB_KEY, reg);
+       write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_JOB_KEY, reg);
        /*
         * Enable send-side J_KEY integrity check, unless this is A0 h/w
         */
        if (!is_ax(dd)) {
-               reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
+               reg = read_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE);
                reg |= SEND_CTXT_CHECK_ENABLE_CHECK_JOB_KEY_SMASK;
-               write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
+               write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE, reg);
        }
 
        /* Enable J_KEY check on receive context. */
        reg = RCV_KEY_CTRL_JOB_KEY_ENABLE_SMASK |
                ((jkey & RCV_KEY_CTRL_JOB_KEY_VALUE_MASK) <<
                 RCV_KEY_CTRL_JOB_KEY_VALUE_SHIFT);
-       write_kctxt_csr(dd, ctxt, RCV_KEY_CTRL, reg);
-done:
-       return ret;
+       write_kctxt_csr(dd, rcd->ctxt, RCV_KEY_CTRL, reg);
+
+       return 0;
 }
 
-int hfi1_clear_ctxt_jkey(struct hfi1_devdata *dd, u16 ctxt)
+int hfi1_clear_ctxt_jkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
 {
-       struct hfi1_ctxtdata *rcd = dd->rcd[ctxt];
-       unsigned sctxt;
-       int ret = 0;
+       u8 hw_ctxt;
        u64 reg;
 
-       if (!rcd || !rcd->sc) {
-               ret = -EINVAL;
-               goto done;
-       }
-       sctxt = rcd->sc->hw_context;
-       write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_JOB_KEY, 0);
+       if (!rcd || !rcd->sc)
+               return -EINVAL;
+
+       hw_ctxt = rcd->sc->hw_context;
+       write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_JOB_KEY, 0);
        /*
         * Disable send-side J_KEY integrity check, unless this is A0 h/w.
         * This check would not have been enabled for A0 h/w, see
         * set_ctxt_jkey().
         */
        if (!is_ax(dd)) {
-               reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
+               reg = read_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE);
                reg &= ~SEND_CTXT_CHECK_ENABLE_CHECK_JOB_KEY_SMASK;
-               write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
+               write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE, reg);
        }
        /* Turn off the J_KEY on the receive side */
-       write_kctxt_csr(dd, ctxt, RCV_KEY_CTRL, 0);
-done:
-       return ret;
+       write_kctxt_csr(dd, rcd->ctxt, RCV_KEY_CTRL, 0);
+
+       return 0;
 }
 
-int hfi1_set_ctxt_pkey(struct hfi1_devdata *dd, u16 ctxt, u16 pkey)
+int hfi1_set_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd,
+                      u16 pkey)
 {
-       struct hfi1_ctxtdata *rcd;
-       unsigned sctxt;
-       int ret = 0;
+       u8 hw_ctxt;
        u64 reg;
 
-       if (ctxt < dd->num_rcv_contexts) {
-               rcd = dd->rcd[ctxt];
-       } else {
-               ret = -EINVAL;
-               goto done;
-       }
-       if (!rcd || !rcd->sc) {
-               ret = -EINVAL;
-               goto done;
-       }
-       sctxt = rcd->sc->hw_context;
+       if (!rcd || !rcd->sc)
+               return -EINVAL;
+
+       hw_ctxt = rcd->sc->hw_context;
        reg = ((u64)pkey & SEND_CTXT_CHECK_PARTITION_KEY_VALUE_MASK) <<
                SEND_CTXT_CHECK_PARTITION_KEY_VALUE_SHIFT;
-       write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_PARTITION_KEY, reg);
-       reg = read_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE);
+       write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_PARTITION_KEY, reg);
+       reg = read_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE);
        reg |= SEND_CTXT_CHECK_ENABLE_CHECK_PARTITION_KEY_SMASK;
        reg &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_KDETH_PACKETS_SMASK;
-       write_kctxt_csr(dd, sctxt, SEND_CTXT_CHECK_ENABLE, reg);
-done:
-       return ret;
+       write_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE, reg);
+
+       return 0;
 }
 
 int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt)
@@ -14645,9 +14632,6 @@ int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt)
        if (!ctxt || !ctxt->sc)
                return -EINVAL;
 
-       if (ctxt->ctxt >= dd->num_rcv_contexts)
-               return -EINVAL;
-
        hw_ctxt = ctxt->sc->hw_context;
        reg = read_kctxt_csr(dd, hw_ctxt, SEND_CTXT_CHECK_ENABLE);
        reg &= ~SEND_CTXT_CHECK_ENABLE_CHECK_PARTITION_KEY_SMASK;
index 008c970412ec20ab89b3cec6bfb49485572f744d..995105214953b9378fbeaf8882fafd20060019ef 100644 (file)
@@ -1357,9 +1357,11 @@ u32 hfi1_read_cntrs(struct hfi1_devdata *dd, char **namep, u64 **cntrp);
 u32 hfi1_read_portcntrs(struct hfi1_pportdata *ppd, char **namep, u64 **cntrp);
 int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which);
 int hfi1_set_ib_cfg(struct hfi1_pportdata *ppd, int which, u32 val);
-int hfi1_set_ctxt_jkey(struct hfi1_devdata *dd, u16 ctxt, u16 jkey);
-int hfi1_clear_ctxt_jkey(struct hfi1_devdata *dd, u16 ctxt);
-int hfi1_set_ctxt_pkey(struct hfi1_devdata *dd, u16 ctxt, u16 pkey);
+int hfi1_set_ctxt_jkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd,
+                      u16 jkey);
+int hfi1_clear_ctxt_jkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt);
+int hfi1_set_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt,
+                      u16 pkey);
 int hfi1_clear_ctxt_pkey(struct hfi1_devdata *dd, struct hfi1_ctxtdata *ctxt);
 void hfi1_read_link_quality(struct hfi1_devdata *dd, u8 *link_quality);
 void hfi1_init_vnic_rsm(struct hfi1_devdata *dd);
index c8f34bc6b620584f398485364e802570a65591a9..51e6a6f0e10fa498873c54c77229e308caac1538 100644 (file)
@@ -795,7 +795,7 @@ static int hfi1_file_close(struct inode *inode, struct file *fp)
                     HFI1_RCVCTRL_NO_RHQ_DROP_DIS |
                     HFI1_RCVCTRL_NO_EGR_DROP_DIS, uctxt->ctxt);
        /* Clear the context's J_KEY */
-       hfi1_clear_ctxt_jkey(dd, uctxt->ctxt);
+       hfi1_clear_ctxt_jkey(dd, uctxt);
        /*
         * If a send context is allocated, reset context integrity
         * checks to default and disable the send context.
@@ -1172,7 +1172,7 @@ static void user_init(struct hfi1_ctxtdata *uctxt)
                clear_rcvhdrtail(uctxt);
 
        /* Setup J_KEY before enabling the context */
-       hfi1_set_ctxt_jkey(uctxt->dd, uctxt->ctxt, uctxt->jkey);
+       hfi1_set_ctxt_jkey(uctxt->dd, uctxt, uctxt->jkey);
 
        rcvctrl_ops = HFI1_RCVCTRL_CTXT_ENB;
        if (HFI1_CAP_UGET_MASK(uctxt->flags, HDRSUPP))
@@ -1545,7 +1545,7 @@ static int set_ctxt_pkey(struct hfi1_ctxtdata *uctxt, u16 subctxt, u16 pkey)
                }
 
        if (intable)
-               ret = hfi1_set_ctxt_pkey(dd, uctxt->ctxt, pkey);
+               ret = hfi1_set_ctxt_pkey(dd, uctxt, pkey);
 done:
        return ret;
 }