Thread (6 messages) 6 messages, 4 authors, 2014-10-02

[PATCH] arm64: Use and error-check DMA_ERROR_CODE

From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2014-10-01 10:57:16
Also in: lkml

On Wed, Oct 01, 2014 at 11:13:23AM +0100, Will Deacon wrote:
On Tue, Sep 30, 2014 at 09:15:21PM +0100, Sean Paul wrote:
quoted
This patch replaces the static assignment of ~0 to dma_handle with
DMA_ERROR_CODE to be consistent with other platforms.

In addition to that, it also adds a check for DMA_ERROR_CODE before
calling __dma_free_coherent with an invalid dma_handle.

Signed-off-by: Sean Paul <redacted>
---
 arch/arm64/mm/dma-mapping.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 4164c5a..69fd2c4 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -125,7 +125,7 @@ static void *__dma_alloc_noncoherent(struct device *dev, size_t size,
 no_map:
 	__dma_free_coherent(dev, size, ptr, *dma_handle, attrs);
 no_mem:
-	*dma_handle = ~0;
+	*dma_handle = DMA_ERROR_CODE;
 	return NULL;
 }
 
@@ -136,7 +136,9 @@ static void __dma_free_noncoherent(struct device *dev, size_t size,
 	void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle));
 
 	vunmap(vaddr);
-	__dma_free_coherent(dev, size, swiotlb_addr, dma_handle, attrs);
+
+	if (dma_handle != DMA_ERROR_CODE)
+		__dma_free_coherent(dev, size, swiotlb_addr, dma_handle, attrs);
Is it legal to try and free a DMA buffer after a failed allocation? If so, I
think we need something similar for arch/arm/.
If the allocation failed, we don't even have a vaddr to unmap, so I
don't see the reason for the additional check.

-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help