projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
05d2cc9
)
dmaengine: idxd: fix calling wq quiesce inside spinlock
author
Dave Jiang
<dave.jiang@intel.com>
Wed, 17 Nov 2021 17:03:51 +0000
(10:03 -0700)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Wed, 22 Dec 2021 08:32:38 +0000
(09:32 +0100)
[ Upstream commit
fa51b16d05583c7aebbc06330afb50276243d198
]
Dan reports that smatch has found idxd_wq_quiesce() is being called inside
the idxd->dev_lock. idxd_wq_quiesce() calls wait_for_completion() and
therefore it can sleep. Move the call outside of the spinlock as it does
not need device lock.
Fixes:
5b0c68c473a1
("dmaengine: idxd: support reporting of halt interrupt")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link:
https://lore.kernel.org/r/163716858508.1721911.15051495873516709923.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/dma/idxd/irq.c
patch
|
blob
|
history
diff --git
a/drivers/dma/idxd/irq.c
b/drivers/dma/idxd/irq.c
index
3261ea2
..
6d6af0d
100644
(file)
--- a/
drivers/dma/idxd/irq.c
+++ b/
drivers/dma/idxd/irq.c
@@
-137,10
+137,10
@@
halt:
INIT_WORK(&idxd->work, idxd_device_reinit);
queue_work(idxd->wq, &idxd->work);
} else {
- spin_lock(&idxd->dev_lock);
idxd->state = IDXD_DEV_HALTED;
idxd_wqs_quiesce(idxd);
idxd_wqs_unmap_portal(idxd);
+ spin_lock(&idxd->dev_lock);
idxd_device_clear_state(idxd);
dev_err(&idxd->pdev->dev,
"idxd halted, need %s.\n",