dmaengine: idxd: cleanup completion record allocation
authorDave Jiang <dave.jiang@intel.com>
Mon, 25 Oct 2021 14:59:49 +0000 (07:59 -0700)
committerVinod Koul <vkoul@kernel.org>
Thu, 28 Oct 2021 17:24:44 +0000 (22:54 +0530)
According to core-api/dma-api-howto.rst, the address from
dma_alloc_coherent is gauranteed to align to the smallest PAGE_SIZE order.
That supercedes the 64B/32B alignment requirement of the completion record.
Remove alignment adjustment code.

Tested-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/163517396063.3484297.7494385225280705372.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/device.c
drivers/dma/idxd/idxd.h

index b1407465d5c48622e8b18cadafbce123159905d6..fab412349f7feb96bfefba70341ccb26b5b0cd6a 100644 (file)
@@ -135,8 +135,6 @@ int idxd_wq_alloc_resources(struct idxd_wq *wq)
        struct idxd_device *idxd = wq->idxd;
        struct device *dev = &idxd->pdev->dev;
        int rc, num_descs, i;
-       int align;
-       u64 tmp;
 
        if (wq->type != IDXD_WQT_KERNEL)
                return 0;
@@ -148,21 +146,13 @@ int idxd_wq_alloc_resources(struct idxd_wq *wq)
        if (rc < 0)
                return rc;
 
-       align = idxd->data->align;
-       wq->compls_size = num_descs * idxd->data->compl_size + align;
-       wq->compls_raw = dma_alloc_coherent(dev, wq->compls_size,
-                                           &wq->compls_addr_raw, GFP_KERNEL);
-       if (!wq->compls_raw) {
+       wq->compls_size = num_descs * idxd->data->compl_size;
+       wq->compls = dma_alloc_coherent(dev, wq->compls_size, &wq->compls_addr, GFP_KERNEL);
+       if (!wq->compls) {
                rc = -ENOMEM;
                goto fail_alloc_compls;
        }
 
-       /* Adjust alignment */
-       wq->compls_addr = (wq->compls_addr_raw + (align - 1)) & ~(align - 1);
-       tmp = (u64)wq->compls_raw;
-       tmp = (tmp + (align - 1)) & ~(align - 1);
-       wq->compls = (struct dsa_completion_record *)tmp;
-
        rc = alloc_descs(wq, num_descs);
        if (rc < 0)
                goto fail_alloc_descs;
@@ -191,8 +181,7 @@ int idxd_wq_alloc_resources(struct idxd_wq *wq)
  fail_sbitmap_init:
        free_descs(wq);
  fail_alloc_descs:
-       dma_free_coherent(dev, wq->compls_size, wq->compls_raw,
-                         wq->compls_addr_raw);
+       dma_free_coherent(dev, wq->compls_size, wq->compls, wq->compls_addr);
  fail_alloc_compls:
        free_hw_descs(wq);
        return rc;
@@ -207,8 +196,7 @@ void idxd_wq_free_resources(struct idxd_wq *wq)
 
        free_hw_descs(wq);
        free_descs(wq);
-       dma_free_coherent(dev, wq->compls_size, wq->compls_raw,
-                         wq->compls_addr_raw);
+       dma_free_coherent(dev, wq->compls_size, wq->compls, wq->compls_addr);
        sbitmap_queue_free(&wq->sbq);
 }
 
index bfcb03329f778a23d58a8ee5c18a504def92dd77..0cf8d3145870afd007dcd4e5b1bc179dd64f93ab 100644 (file)
@@ -187,9 +187,7 @@ struct idxd_wq {
                struct dsa_completion_record *compls;
                struct iax_completion_record *iax_compls;
        };
-       void *compls_raw;
        dma_addr_t compls_addr;
-       dma_addr_t compls_addr_raw;
        int compls_size;
        struct idxd_desc **descs;
        struct sbitmap_queue sbq;