From: Joakim Zhang Date: Thu, 14 Dec 2023 08:25:26 +0000 (+0800) Subject: dma-mapping: clear dev->dma_mem to NULL after freeing it X-Git-Tag: v6.6.17~1197 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=849ca053beb0372ad3ef4c3a15eb511bcb461691;p=platform%2Fkernel%2Flinux-rpi.git dma-mapping: clear dev->dma_mem to NULL after freeing it [ Upstream commit b07bc2347672cc8c7293c64499f1488278c5ca3d ] 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 Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index c21abc7..ff5683a 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,