projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
f55532a
)
dmaengine: qcom: bam_dma: fix dma free memory on remove
author
Stanimir Varbanov
<stanimir.varbanov@linaro.org>
Mon, 11 Apr 2016 08:38:38 +0000
(11:38 +0300)
committer
Vinod Koul
<vinod.koul@intel.com>
Tue, 19 Apr 2016 15:41:31 +0000
(21:11 +0530)
Building the driver as a module and when removing the already
inserted module gives below:
[ 1389.392788] Unable to handle kernel paging request at virtual address
ffffffbdc000001c
[ 1389.421321] pgd =
ffffffc02fa87000
[ 1389.447899] [
ffffffbdc000001c
] *pgd=
0000000000000000
, *pud=
0000000000000000
[ 1389.460142] Internal error: Oops:
96000006
[#1] PREEMPT SMP
[ 1389.466963] Modules linked in: qcom_bam_dma(-)
[ 1389.486608] CPU: 2 PID: 2442 Comm: rmmod Not tainted 4.2.0+ #407
[ 1389.493885] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
[ 1389.501196] task:
ffffffc035bae2c0
ti:
ffffffc0368a8000
task.ti:
ffffffc0368a8000
[ 1389.508566] PC is at __free_pages+0xc/0x40
[ 1389.515893] LR is at free_pages.part.93+0x30/0x38
[ 1389.523141] pc : [<
ffffffc00016180c
>] lr : [<
ffffffc00016197c
>] pstate:
80000145
[ 1389.530602] sp :
ffffffc0368abc20
[ 1389.537931] x29:
ffffffc0368abc20
x28:
ffffffc0368a8000
[ 1389.549153] x27:
0000000000000000
x26:
0000000000000000
[ 1389.560412] x25:
ffffffc000cb2000
x24:
0000000000000170
[ 1389.571530] x23:
0000000000000004
x22:
ffffffc036bc5010
[ 1389.582721] x21:
ffffffc036bc5010
x20:
0000000000000000
[ 1389.593981] x19:
0000000000000002
x18:
0000007fcbc8e8b0
[ 1389.605301] x17:
0000007f9b8226ec
x16:
ffffffc0002089e8
[ 1389.616647] x15:
0000007f9b8a0588
x14:
0ffffffffffffffc
[ 1389.628039] x13:
0000000000000030
x12:
0000000000000000
[ 1389.639436] x11:
0000000000000008
x10:
ffffffc000ecc000
[ 1389.650872] x9 :
ffffffc035bae2c0
x8 :
ffffffc035bae9a8
[ 1389.662367] x7 :
ffffffc035bae9a0
x6 :
0000000000000000
[ 1389.673906] x5 :
ffffffbdc000001c
x4 :
0000000080000000
[ 1389.685475] x3 :
ffffffbdc0000000
x2 :
0000004080000000
[ 1389.697049] x1 :
0000000000000003
x0 :
ffffffbdc0000000
The memory has been already freed by bam_free_chan() so fix this
by skiping already freed memory.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Reviewed-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/qcom/bam_dma.c
patch
|
blob
|
history
diff --git
a/drivers/dma/qcom/bam_dma.c
b/drivers/dma/qcom/bam_dma.c
index d5e0a9c3ad5d035d5489fd1fbe5552afe04a3877..a486bc0f82e03286f053fd4f83a74ead00dcfba7 100644
(file)
--- a/
drivers/dma/qcom/bam_dma.c
+++ b/
drivers/dma/qcom/bam_dma.c
@@
-1234,6
+1234,9
@@
static int bam_dma_remove(struct platform_device *pdev)
bam_dma_terminate_all(&bdev->channels[i].vc.chan);
tasklet_kill(&bdev->channels[i].vc.task);
+ if (!bdev->channels[i].fifo_virt)
+ continue;
+
dma_free_wc(bdev->dev, BAM_DESC_FIFO_SIZE,
bdev->channels[i].fifo_virt,
bdev->channels[i].fifo_phys);