diff options
author | Joakim Zhang <joakim.zhang@cixtech.com> | 2023-12-14 16:25:26 +0800 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2023-12-15 12:32:45 +0100 |
commit | b07bc2347672cc8c7293c64499f1488278c5ca3d (patch) | |
tree | aca1a94c5a8140811dce24fdbcb962e25dedfa7f /kernel/dma | |
parent | 55c543865b76830f524ce5ce1243266a93d06f84 (diff) |
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.c | 4 |
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, |