DMA allocations can be done through DMA pools, add an API that can be used to check if an allocation is done from a pool. This will be used in the later commit during preservation of DMA allocation. Signed-off-by: Samiullah Khawaja --- include/linux/dma-map-ops.h | 1 + kernel/dma/pool.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h index 6a1832a73cad..6a0bc4ea2467 100644 --- a/include/linux/dma-map-ops.h +++ b/include/linux/dma-map-ops.h @@ -216,6 +216,7 @@ struct page *dma_alloc_from_pool(struct device *dev, size_t size, bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t)); bool dma_free_from_pool(struct device *dev, void *start, size_t size); +bool dma_is_from_pool(struct device *dev, void *start, size_t size); int dma_direct_set_offset(struct device *dev, phys_addr_t cpu_start, dma_addr_t dma_start, u64 size); diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c index 2b2fbb709242..32ce4d6d7683 100644 --- a/kernel/dma/pool.c +++ b/kernel/dma/pool.c @@ -307,3 +307,16 @@ bool dma_free_from_pool(struct device *dev, void *start, size_t size) return false; } + +bool dma_is_from_pool(struct device *dev, void *start, size_t size) +{ + struct gen_pool *pool = NULL; + + while ((pool = dma_guess_pool(pool, 0))) { + if (!gen_pool_has_addr(pool, (unsigned long)start, size)) + continue; + return true; + } + + return false; +} -- 2.54.0.545.g6539524ca2-goog