ARM/dma-mapping: take the bus limit into account in __dma_alloc
authorChristoph Hellwig <hch@lst.de>
Mon, 17 Feb 2020 11:50:23 +0000 (12:50 +0100)
committerChristoph Hellwig <hch@lst.de>
Fri, 20 Mar 2020 10:43:21 +0000 (11:43 +0100)
The DMA coherent allocator needs to take bus limits into account for
picking the zone that the memory is allocated from.

Reported-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: Roger Quadros <rogerq@ti.com>
arch/arm/mm/dma-mapping.c

index 72ddc3d0f5ebb29c219ccd46a7351abf89eeeb31..87aba505554ac1e9e80a034aadbb547dff4b86cf 100644 (file)
@@ -658,7 +658,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
                         gfp_t gfp, pgprot_t prot, bool is_coherent,
                         unsigned long attrs, const void *caller)
 {
-       u64 mask = dev->coherent_dma_mask;
+       u64 mask = min_not_zero(dev->coherent_dma_mask, dev->bus_dma_limit);
        struct page *page = NULL;
        void *addr;
        bool allowblock, cma;