Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05e866b4 authored by Jon Hunter's avatar Jon Hunter Committed by Vinod Koul
Browse files

dmaengine: tegra-apb: Free interrupts before killing tasklets



On probe failure or driver removal, before killing any tasklets, ensure
that the channel interrupt is freed to ensure that another channel
interrupt cannot occur and schedule the tasklet again.

Signed-off-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent 8fe9739b
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1396,8 +1396,7 @@ static int tegra_dma_probe(struct platform_device *pdev)
		}
		tdc->irq = res->start;
		snprintf(tdc->name, sizeof(tdc->name), "apbdma.%d", i);
		ret = devm_request_irq(&pdev->dev, tdc->irq,
				tegra_dma_isr, 0, tdc->name, tdc);
		ret = request_irq(tdc->irq, tegra_dma_isr, 0, tdc->name, tdc);
		if (ret) {
			dev_err(&pdev->dev,
				"request_irq failed with err %d channel %d\n",
@@ -1478,6 +1477,8 @@ static int tegra_dma_probe(struct platform_device *pdev)
err_irq:
	while (--i >= 0) {
		struct tegra_dma_channel *tdc = &tdma->channels[i];

		free_irq(tdc->irq, tdc);
		tasklet_kill(&tdc->tasklet);
	}

@@ -1497,6 +1498,7 @@ static int tegra_dma_remove(struct platform_device *pdev)

	for (i = 0; i < tdma->chip_data->nr_channels; ++i) {
		tdc = &tdma->channels[i];
		free_irq(tdc->irq, tdc);
		tasklet_kill(&tdc->tasklet);
	}