mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
dmaengine: dw-edma: Release requested IRQs on failure
If dw_edma_irq_request() fails to initialize an IRQ handler, any previously requested IRQs will be left initialized. Release the previously requested IRQs in the cleanup-on-error path of dw_edma_irq_request(). Link: https://lore.kernel.org/r/20230113171409.30470-3-Sergey.Semin@baikalelectronics.ru Fixes: e63d79d1ffcd ("dmaengine: Add Synopsys eDMA IP core driver") Tested-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Acked-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
37fe46051d
commit
0278067445
@ -893,10 +893,8 @@ static int dw_edma_irq_request(struct dw_edma *dw,
|
||||
dw_edma_interrupt_read,
|
||||
IRQF_SHARED, dw->name,
|
||||
&dw->irq[i]);
|
||||
if (err) {
|
||||
dw->nr_irqs = i;
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto err_irq_free;
|
||||
|
||||
if (irq_get_msi_desc(irq))
|
||||
get_cached_msi_msg(irq, &dw->irq[i].msi);
|
||||
@ -905,6 +903,14 @@ static int dw_edma_irq_request(struct dw_edma *dw,
|
||||
dw->nr_irqs = i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_irq_free:
|
||||
for (i--; i >= 0; i--) {
|
||||
irq = chip->ops->irq_vector(dev, i);
|
||||
free_irq(irq, &dw->irq[i]);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user