dmaengine: idxd: move wq irq enabling to after device enable
authorDave Jiang <dave.jiang@intel.com>
Fri, 4 Mar 2022 21:02:57 +0000 (14:02 -0700)
committerVinod Koul <vkoul@kernel.org>
Wed, 20 Apr 2022 11:55:42 +0000 (17:25 +0530)
Move the calling of request_irq() and other related irq setup code until
after the WQ is successfully enabled. This reduces the amount of
setup/teardown if the wq is not configured correctly and cannot be enabled.

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

index 13e0619..6441144 100644 (file)
@@ -291,13 +291,6 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
        mutex_lock(&wq->wq_lock);
        wq->type = IDXD_WQT_KERNEL;
 
-       rc = idxd_wq_request_irq(wq);
-       if (rc < 0) {
-               idxd->cmd_status = IDXD_SCMD_WQ_IRQ_ERR;
-               dev_dbg(dev, "WQ %d irq setup failed: %d\n", wq->id, rc);
-               goto err_irq;
-       }
-
        rc = __drv_enable_wq(wq);
        if (rc < 0) {
                dev_dbg(dev, "Enable wq %d failed: %d\n", wq->id, rc);
@@ -305,6 +298,13 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
                goto err;
        }
 
+       rc = idxd_wq_request_irq(wq);
+       if (rc < 0) {
+               idxd->cmd_status = IDXD_SCMD_WQ_IRQ_ERR;
+               dev_dbg(dev, "WQ %d irq setup failed: %d\n", wq->id, rc);
+               goto err_irq;
+       }
+
        rc = idxd_wq_alloc_resources(wq);
        if (rc < 0) {
                idxd->cmd_status = IDXD_SCMD_WQ_RES_ALLOC_ERR;
@@ -336,10 +336,10 @@ err_dma:
 err_ref:
        idxd_wq_free_resources(wq);
 err_res_alloc:
-       __drv_disable_wq(wq);
-err:
        idxd_wq_free_irq(wq);
 err_irq:
+       __drv_disable_wq(wq);
+err:
        wq->type = IDXD_WQT_NONE;
        mutex_unlock(&wq->wq_lock);
        return rc;