dmaengine: add verification of DMA_INTERRUPT capability for dmatest
authorDave Jiang <dave.jiang@intel.com>
Tue, 12 Apr 2022 18:06:32 +0000 (11:06 -0700)
committerVinod Koul <vkoul@kernel.org>
Wed, 20 Apr 2022 11:51:15 +0000 (17:21 +0530)
Looks like I forgot to add DMA_INTERRUPT cap setting to the idxd driver and
dmatest is still working regardless of this mistake. Add an explicit check
of DMA_INTERRUPT capability for dmatest to make sure the DMA device being used
actually supports interrupt before the test is launched and also that the
driver is programmed correctly.

Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/164978679251.2361020.5856734256126725993.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dmatest.c

index f696246..0a2168a 100644 (file)
@@ -675,10 +675,16 @@ static int dmatest_func(void *data)
        /*
         * src and dst buffers are freed by ourselves below
         */
-       if (params->polled)
+       if (params->polled) {
                flags = DMA_CTRL_ACK;
-       else
-               flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
+       } else {
+               if (dma_has_cap(DMA_INTERRUPT, dev->cap_mask)) {
+                       flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
+               } else {
+                       pr_err("Channel does not support interrupt!\n");
+                       goto err_pq_array;
+               }
+       }
 
        ktime = ktime_get();
        while (!(kthread_should_stop() ||
@@ -906,6 +912,7 @@ error_unmap_continue:
        runtime = ktime_to_us(ktime);
 
        ret = 0;
+err_pq_array:
        kfree(dma_pq);
 err_srcs_array:
        kfree(srcs);