From 4421fe533296e070359573ab6d320d74f73c80b9 Mon Sep 17 00:00:00 2001 From: Parth Y Shah Date: Mon, 7 Dec 2020 12:03:40 +0530 Subject: [PATCH] dmaengine: bam_dma: fix return of bam_dma_irq() While performing suspend/resume, we were getting below kernel crash. [ 54.541672] [FTS][Info]gesture suspend... [ 54.605256] [FTS][Error][GESTURE]Enter into gesture(suspend) failed! [ 54.605256] [ 58.345850] irq event 10: bogus return value fffffff3 ...... [ 58.345966] [] el1_irq+0xb0/0x124 [ 58.345971] [] arch_cpu_idle+0x10/0x18 [ 58.345975] [] do_idle+0x1ac/0x1e0 [ 58.345979] [] cpu_startup_entry+0x20/0x28 [ 58.345983] [] rest_init+0xd0/0xdc [ 58.345988] [] start_kernel+0x390/0x3a4 [ 58.345990] handlers: [ 58.345994] [] bam_dma_irq The reason for the crash we found is, bam_dma_irq() was returning negative value when the device resumes in some conditions. In addition, the irq handler should have one of the below return values. IRQ_NONE interrupt was not from this device or was not handled IRQ_HANDLED interrupt was handled by this device IRQ_WAKE_THREAD handler requests to wake the handler thread Therefore, to resolve this crash, we have changed the return value to IRQ_NONE. Signed-off-by: Parth Y Shah Link: https://lore.kernel.org/r/1607322820-7450-1-git-send-email-sparth1292@gmail.com Signed-off-by: Vinod Koul --- drivers/dma/qcom/bam_dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c index 4eeb8bb27279..d5773d474d8f 100644 --- a/drivers/dma/qcom/bam_dma.c +++ b/drivers/dma/qcom/bam_dma.c @@ -875,7 +875,7 @@ static irqreturn_t bam_dma_irq(int irq, void *data) ret = bam_pm_runtime_get_sync(bdev->dev); if (ret < 0) - return ret; + return IRQ_NONE; if (srcs & BAM_IRQ) { clr_mask = readl_relaxed(bam_addr(bdev, 0, BAM_IRQ_STTS));