提交 7a1a3926 编写于 作者: D Dave Jiang 提交者: Xiaochen Shen

dmaengine: idxd: move wq irq enabling to after device enable

mainline inclusion
from mainline-v5.19
commit 439b5e76
category: feature
bugzilla: https://gitee.com/openeuler/intel-kernel/issues/I596WO
CVE: NA

Intel-SIG: commit 439b5e76 dmaengine: idxd: move wq irq enabling to after device enable.
Incremental backporting patches for DSA/IAA on Intel Xeon platform.

--------------------------------

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: NDave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/164642777730.179702.1880317757087484299.stgit@djiang5-desk3.ch.intel.comSigned-off-by: NVinod Koul <vkoul@kernel.org>
Signed-off-by: NXiaochen Shen <xiaochen.shen@intel.com>
上级 225f3ae6
...@@ -313,13 +313,6 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev) ...@@ -313,13 +313,6 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
mutex_lock(&wq->wq_lock); mutex_lock(&wq->wq_lock);
wq->type = IDXD_WQT_KERNEL; 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); rc = __drv_enable_wq(wq);
if (rc < 0) { if (rc < 0) {
dev_dbg(dev, "Enable wq %d failed: %d\n", wq->id, rc); dev_dbg(dev, "Enable wq %d failed: %d\n", wq->id, rc);
...@@ -327,6 +320,13 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev) ...@@ -327,6 +320,13 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
goto err; 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); rc = idxd_wq_alloc_resources(wq);
if (rc < 0) { if (rc < 0) {
idxd->cmd_status = IDXD_SCMD_WQ_RES_ALLOC_ERR; idxd->cmd_status = IDXD_SCMD_WQ_RES_ALLOC_ERR;
...@@ -358,10 +358,10 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev) ...@@ -358,10 +358,10 @@ static int idxd_dmaengine_drv_probe(struct idxd_dev *idxd_dev)
err_ref: err_ref:
idxd_wq_free_resources(wq); idxd_wq_free_resources(wq);
err_res_alloc: err_res_alloc:
__drv_disable_wq(wq);
err:
idxd_wq_free_irq(wq); idxd_wq_free_irq(wq);
err_irq: err_irq:
__drv_disable_wq(wq);
err:
wq->type = IDXD_WQT_NONE; wq->type = IDXD_WQT_NONE;
mutex_unlock(&wq->wq_lock); mutex_unlock(&wq->wq_lock);
return rc; return rc;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册