dmaengine: mediatek-cqdma: sleeping in atomic context
Subsystems (4)
PATCH 1/1 dmaengine: mediatek-cqdma: sleeping in atomic context
The mtk_cqdma_poll_engine_done() function takes a true/false parameter where true means it's called from atomic context. There are a couple places where it was set to false but it's actually in atomic context so it should be true.
All the callers for mtk_cqdma_hard_reset() are holding a spin_lock and in mtk_cqdma_free_chan_resources() we take a spin_lock before calling the mtk_cqdma_poll_engine_done() function.
---
The "atomic" parameter is always true so the temptation was to just remove it entirely.
drivers/dma/mediatek/mtk-cqdma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/mediatek/mtk-cqdma.c +2 -2
@@ -225,7 +225,7 @@ static int mtk_cqdma_hard_reset(struct mtk_cqdma_pchan *pc)mtk_dma_set (pc,MTK_CQDMA_RESET ,MTK_CQDMA_HARD_RST_BIT );mtk_dma_clr (pc,MTK_CQDMA_RESET ,MTK_CQDMA_HARD_RST_BIT ); -return mtk_cqdma_poll_engine_done (pc, false); +return mtk_cqdma_poll_engine_done (pc, true); } static void mtk_cqdma_start(struct mtk_cqdma_pchan *pc,
@@ -671,7 +671,7 @@ static void mtk_cqdma_free_chan_resources(struct dma_chan *c)mtk_dma_set (cvc->pc,MTK_CQDMA_FLUSH ,MTK_CQDMA_FLUSH_BIT );/* wait for the completion of flush operation */ -if (mtk_cqdma_poll_engine_done (cvc->pc, false) <0 ) +if (mtk_cqdma_poll_engine_done (cvc->pc, true) <0 )dev_err (cqdma2dev (to_cqdma_dev (c)),"cqdma flush timeout\n" );/* clear the flush bit and interrupt flag */
Signature · 1 line
2.18.0
Quoted 8 lines · Dan Carpenter
The
mtk_cqdma_poll_engine_done()function takes a true/false parameter where true means it's called from atomic context. There are a couple places where it was set to false but it's actually in atomic context so it should be true.All the callers for
mtk_cqdma_hard_reset()are holding aspin_lockand inmtk_cqdma_free_chan_resources()we take aspin_lockbefore calling themtk_cqdma_poll_engine_done()function.
Applied, thanks
Quoted 6 lines
Fixes b1f01e48df5a ("dmaengine: mediatek: Add MediaTek Command-Queue DMA controller for MT6765 SoC")Signed-off-by Dan Carpenter <[email protected]>---
The "atomic" parameter is always true so the temptation was to just remove it entirely.
a patch is welcome :)
Signature · 1 line
~Vinod