summaryrefslogtreecommitdiffstats
path: root/kernel/dma
diff options
context:
space:
mode:
authorJoakim Zhang <joakim.zhang@cixtech.com>2023-12-14 16:25:26 +0800
committerChristoph Hellwig <hch@lst.de>2023-12-15 12:32:45 +0100
commitb07bc2347672cc8c7293c64499f1488278c5ca3d (patch)
treeaca1a94c5a8140811dce24fdbcb962e25dedfa7f /kernel/dma
parent55c543865b76830f524ce5ce1243266a93d06f84 (diff)
downloadlinux-b07bc2347672cc8c7293c64499f1488278c5ca3d.tar.gz
linux-b07bc2347672cc8c7293c64499f1488278c5ca3d.tar.bz2
linux-b07bc2347672cc8c7293c64499f1488278c5ca3d.zip
dma-mapping: clear dev->dma_mem to NULL after freeing it
Reproduced with below sequence: dma_declare_coherent_memory()->dma_release_coherent_memory() ->dma_declare_coherent_memory()->"return -EBUSY" error It will return -EBUSY from the dma_assign_coherent_memory() in dma_declare_coherent_memory(), the reason is that dev->dma_mem pointer has not been set to NULL after it's freed. Fixes: cf65a0f6f6ff ("dma-mapping: move all DMA mapping code to kernel/dma") Signed-off-by: Joakim Zhang <joakim.zhang@cixtech.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'kernel/dma')
-rw-r--r--kernel/dma/coherent.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c
index c21abc77c53e..ff5683a57f77 100644
--- a/kernel/dma/coherent.c
+++ b/kernel/dma/coherent.c
@@ -132,8 +132,10 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
void dma_release_coherent_memory(struct device *dev)
{
- if (dev)
+ if (dev) {
_dma_release_coherent_memory(dev->dma_mem);
+ dev->dma_mem = NULL;
+ }
}
static void *__dma_alloc_from_coherent(struct device *dev,