diff options
author | Baolin Wang <baolin.wang@linaro.org> | 2019-05-06 15:28:29 +0800 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2019-05-21 19:23:54 +0530 |
commit | 58152b0e573e5581c4b9ef7cf06d2e9fafae27d4 (patch) | |
tree | 43e0a9a3f5abe71c40a6fc86b06239646e383f4c /drivers/dma | |
parent | 16d0f85e45b99411ac10cb12cdd9279204a72381 (diff) | |
download | linux-58152b0e573e5581c4b9ef7cf06d2e9fafae27d4.tar.bz2 |
dmaengine: sprd: Add validation of current descriptor in irq handler
When user terminates one DMA channel to free all its descriptors, but
at the same time one transaction interrupt was triggered possibly, now
we should not handle this interrupt by validating if the 'schan->cur_desc'
was set as NULL to avoid crashing the kernel.
Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/sprd-dma.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index e29342ab85f6..431e289d59a5 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -552,12 +552,17 @@ static irqreturn_t dma_irq_handle(int irq, void *dev_id) schan = &sdev->channels[i]; spin_lock(&schan->vc.lock); + + sdesc = schan->cur_desc; + if (!sdesc) { + spin_unlock(&schan->vc.lock); + return IRQ_HANDLED; + } + int_type = sprd_dma_get_int_type(schan); req_type = sprd_dma_get_req_type(schan); sprd_dma_clear_int(schan); - sdesc = schan->cur_desc; - /* cyclic mode schedule callback */ cyclic = schan->linklist.phy_addr ? true : false; if (cyclic == true) { |