mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
dmaengine: ste_dma40: Fix probe IRQ leak
d40_probe() registers the hardware interrupt before several later probe
steps that can fail. Those error paths jump to destroy_cache without
freeing the IRQ, leaving the handler registered after probe resources have
been released.
Route failures after a successful IRQ request through a dedicated cleanup
label. Keep the request before DMAengine registration because that
registration publishes channels to clients.
Fixes: 8d318a50b3 ("DMAENGINE: Support for ST-Ericssons DMA40 block v3")
Reported-by: sashiko-bot@kernel.org
Closes: https://lore.kernel.org/dmaengine/20260618051539.15E201F000E9@smtp.kernel.org/
Assisted-by: LLM
Signed-off-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260927-dma40-fixes-v7-10-89f595e8851d@kernel.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
ffd583a734
commit
7ca608cf6b
|
|
@ -3841,18 +3841,20 @@ static int __init d40_probe(struct platform_device *pdev)
|
|||
}
|
||||
ret = d40_dmaengine_init(base, num_reserved_chans);
|
||||
if (ret)
|
||||
goto destroy_cache;
|
||||
goto release_irq;
|
||||
|
||||
ret = of_dma_controller_register(np, d40_xlate, NULL);
|
||||
if (ret) {
|
||||
dev_err(dev,
|
||||
"could not register of_dma_controller\n");
|
||||
goto destroy_cache;
|
||||
goto release_irq;
|
||||
}
|
||||
|
||||
dev_info(base->dev, "initialized\n");
|
||||
return 0;
|
||||
|
||||
release_irq:
|
||||
free_irq(base->irq, base);
|
||||
destroy_cache:
|
||||
if (base->lcla_pool.dma_addr)
|
||||
dma_unmap_single(base->dev, base->lcla_pool.dma_addr,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user