dmaengine: idxd: clear misc interrupt cause after read
authorDave Jiang <dave.jiang@intel.com>
Wed, 29 Jul 2020 15:57:26 +0000 (08:57 -0700)
committerVinod Koul <vkoul@kernel.org>
Mon, 17 Aug 2020 05:19:11 +0000 (10:49 +0530)
Move the clearing of misc interrupt cause to immediately after reading the
register in order to allow the next interrupt to be asserted.

Suggested-by: Nikhil Rao <nikhil.rao@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/159603824665.28647.5344356370364397996.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/irq.c

index b514255..11ac070 100644 (file)
@@ -76,6 +76,7 @@ irqreturn_t idxd_misc_thread(int vec, void *data)
        bool err = false;
 
        cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET);
+       iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET);
 
        if (cause & IDXD_INTC_ERR) {
                spin_lock_bh(&idxd->dev_lock);
@@ -133,7 +134,6 @@ irqreturn_t idxd_misc_thread(int vec, void *data)
                dev_warn_once(dev, "Unexpected interrupt cause bits set: %#x\n",
                              val);
 
-       iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET);
        if (!err)
                goto out;