dma-direct: fail allocations that can't be made coherent
authorChristoph Hellwig <hch@lst.de>
Tue, 9 Nov 2021 14:47:56 +0000 (15:47 +0100)
committerChristoph Hellwig <hch@lst.de>
Tue, 7 Dec 2021 11:50:06 +0000 (12:50 +0100)
If the architecture can't remap or set an address uncached there is no way
to fullfill a request for a coherent allocation.  Return NULL in that case.
Note that this case currently does not happen, so this is a theoretical
fixup and/or a preparation for eventually supporting platforms that
can't support coherent allocations with the generic code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
kernel/dma/direct.c

index f9658fe..a130176 100644 (file)
@@ -233,8 +233,9 @@ void *dma_direct_alloc(struct device *dev, size_t size,
                                return dma_direct_alloc_from_pool(dev, size,
                                                dma_handle, gfp);
                } else {
-                       if (IS_ENABLED(CONFIG_ARCH_HAS_DMA_SET_UNCACHED))
-                               set_uncached = true;
+                       if (!IS_ENABLED(CONFIG_ARCH_HAS_DMA_SET_UNCACHED))
+                               return NULL;
+                       set_uncached = true;
                }
        }