IB/hfi1: Remove rcvhdrq_size
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Wed, 20 Jun 2018 16:42:31 +0000 (09:42 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 22 Jun 2018 15:12:17 +0000 (09:12 -0600)
The usage of this ctxt data field is not hot path and the value can be
computed on demand to cut down the ctxtdata bloat.

Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/hfi1/chip.c
drivers/infiniband/hw/hfi1/file_ops.c
drivers/infiniband/hw/hfi1/hfi.h
drivers/infiniband/hw/hfi1/init.c

index ccbdce2..c254f47 100644 (file)
@@ -11857,7 +11857,7 @@ void hfi1_rcvctrl(struct hfi1_devdata *dd, unsigned int op,
                 * sequence numbers could land exactly on the same spot.
                 * E.g. a rcd restart before the receive header wrapped.
                 */
-               memset(rcd->rcvhdrq, 0, rcd->rcvhdrq_size);
+               memset(rcd->rcvhdrq, 0, rcvhdrq_size(rcd));
 
                /* starting timeout */
                rcd->rcvavail_timeout = dd->rcv_intr_timeout_csr;
index 0fc4aa9..3b09eed 100644 (file)
@@ -411,7 +411,7 @@ static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma)
                mapio = 1;
                break;
        case RCV_HDRQ:
-               memlen = uctxt->rcvhdrq_size;
+               memlen = rcvhdrq_size(uctxt);
                memvirt = uctxt->rcvhdrq;
                break;
        case RCV_EGRBUF: {
@@ -521,7 +521,7 @@ static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma)
                break;
        case SUBCTXT_RCV_HDRQ:
                memaddr = (u64)uctxt->subctxt_rcvhdr_base;
-               memlen = uctxt->rcvhdrq_size * uctxt->subctxt_cnt;
+               memlen = rcvhdrq_size(uctxt) * uctxt->subctxt_cnt;
                flags |= VM_IO | VM_DONTEXPAND;
                vmf = 1;
                break;
@@ -1040,7 +1040,7 @@ static int setup_subctxt(struct hfi1_ctxtdata *uctxt)
                return -ENOMEM;
 
        /* We can take the size of the RcvHdr Queue from the master */
-       uctxt->subctxt_rcvhdr_base = vmalloc_user(uctxt->rcvhdrq_size *
+       uctxt->subctxt_rcvhdr_base = vmalloc_user(rcvhdrq_size(uctxt) *
                                                  num_subctxts);
        if (!uctxt->subctxt_rcvhdr_base) {
                ret = -ENOMEM;
index ba6dd2c..4a8e593 100644 (file)
@@ -201,8 +201,6 @@ struct hfi1_ctxtdata {
        volatile __le64 *rcvhdrtail_kvaddr;
        /* when waiting for rcv or pioavail */
        wait_queue_head_t wait;
-       /* rcvhdrq size (for freeing) */
-       size_t rcvhdrq_size;
        /* number of rcvhdrq entries */
        u16 rcvhdrq_cnt;
        /* size of each of the rcvhdrq entries */
@@ -324,6 +322,19 @@ struct hfi1_ctxtdata {
        u8 vnic_q_idx;
 };
 
+/**
+ * rcvhdrq_size - return total size in bytes for header queue
+ * @rcd: the receive context
+ *
+ * rcvhdrqentsize is in DWs, so we have to convert to bytes
+ *
+ */
+static inline u32 rcvhdrq_size(struct hfi1_ctxtdata *rcd)
+{
+       return PAGE_ALIGN(rcd->rcvhdrq_cnt *
+                         rcd->rcvhdrqentsize * sizeof(u32));
+}
+
 /*
  * Represents a single packet at a high level. Put commonly computed things in
  * here so we do not have to keep doing them over and over. The rule of thumb is
index f2a0b03..47a1f5c 100644 (file)
@@ -1129,7 +1129,7 @@ void hfi1_free_ctxtdata(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
                return;
 
        if (rcd->rcvhdrq) {
-               dma_free_coherent(&dd->pcidev->dev, rcd->rcvhdrq_size,
+               dma_free_coherent(&dd->pcidev->dev, rcvhdrq_size(rcd),
                                  rcd->rcvhdrq, rcd->rcvhdrq_dma);
                rcd->rcvhdrq = NULL;
                if (rcd->rcvhdrtail_kvaddr) {
@@ -1840,12 +1840,7 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
        if (!rcd->rcvhdrq) {
                gfp_t gfp_flags;
 
-               /*
-                * rcvhdrqentsize is in DWs, so we have to convert to bytes
-                * (* sizeof(u32)).
-                */
-               amt = PAGE_ALIGN(rcd->rcvhdrq_cnt * rcd->rcvhdrqentsize *
-                                sizeof(u32));
+               amt = rcvhdrq_size(rcd);
 
                if (rcd->ctxt < dd->first_dyn_alloc_ctxt || rcd->is_vnic)
                        gfp_flags = GFP_KERNEL;
@@ -1870,8 +1865,6 @@ int hfi1_create_rcvhdrq(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd)
                        if (!rcd->rcvhdrtail_kvaddr)
                                goto bail_free;
                }
-
-               rcd->rcvhdrq_size = amt;
        }
        /*
         * These values are per-context: