kernel_samsung_a53x/drivers/dma
Duoming Zhou 9ab885abcf dmaengine: mediatek: Fix deadlock caused by synchronize_irq()
[ Upstream commit 01f1ae2733e2bb4de92fefcea5fda847d92aede1 ]

The synchronize_irq(c->irq) will not return until the IRQ handler
mtk_uart_apdma_irq_handler() is completed. If the synchronize_irq()
holds a spin_lock and waits the IRQ handler to complete, but the
IRQ handler also needs the same spin_lock. The deadlock will happen.
The process is shown below:

          cpu0                        cpu1
mtk_uart_apdma_device_pause() | mtk_uart_apdma_irq_handler()
  spin_lock_irqsave()         |
                              |   spin_lock_irqsave()
  //hold the lock to wait     |
  synchronize_irq()           |

This patch reorders the synchronize_irq(c->irq) outside the spin_lock
in order to mitigate the bug.

Fixes: 9135408c3ace ("dmaengine: mediatek: Add MediaTek UART APDMA support")
Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
Reviewed-by: Eugen Hristev <eugen.hristev@collabora.com>
Link: https://lore.kernel.org/r/20230806032511.45263-1-duoming@zju.edu.cn
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-08 11:25:53 +01:00
..
bestcomm Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dw Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dw-axi-dmac Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dw-edma Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-dpaa2-qdma Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hsu Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idxd Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ioat Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ipu Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mediatek dmaengine: mediatek: Fix deadlock caused by synchronize_irq() 2024-11-08 11:25:53 +01:00
ppc4xx Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
qcom Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sf-pdma Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ti Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xilinx Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
acpi-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
altera-msgdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
amba-pl08x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
at_hdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
at_hdmac_regs.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
at_xdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bcm-sba-raid.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bcm2835-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
coh901318.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
coh901318.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
coh901318_lli.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dma-axi-dmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dma-jz4780.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dmaengine.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dmaengine.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dmatest.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ep93xx_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-edma-common.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-edma-common.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-edma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-qdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl_raid.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl_raid.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsldma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsldma.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hisi_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idma64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
idma64.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
img-mdc-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
imx-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
imx-sdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iop-adma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
iop-adma.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
k3dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
lpc18xx-dmamux.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mcf-edma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
milbeaut-hdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
milbeaut-xdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmp_pdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmp_tdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
moxart-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mpc512x_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mv_xor.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mv_xor.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mv_xor_v2.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mxs-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nbpfaxi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
of-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
owl-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pch_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pl330.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
plx_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pxa_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
s3c24xx-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sa11x0-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
samsung-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sirf-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sprd-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
st_fdma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
st_fdma.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ste_dma40.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ste_dma40_ll.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ste_dma40_ll.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stm32-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stm32-dmamux.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stm32-mdma.c dmaengine: stm32-mdma: abort resume if no ongoing transfer 2024-11-08 11:25:47 +01:00
sun4i-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sun6i-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tegra20-apb-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tegra210-adma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
timb_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
TODO Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
txx9dmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
txx9dmac.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uniphier-mdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uniphier-xdmac.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
virt-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
virt-dma.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xgene-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
zx_dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00