mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
dma/pool: Improve pool lookup
If CONFIG_ZONE_DMA32 is enabled, but we have not allocated the corresponding atomic_pool_dma32, dma_guess_pool() may return the NULL value of that and fail a GFP_DMA32 allocation without trying to fall back to other pools which may exist. Furthermore, if no GFP_DMA pool exists, it is preferable to try GFP_DMA32 rather than immediately fall back to GFP_KERNEL with even less chance of success. Improve matters by encoding an explicit order of pool preference for each flag. Signed-off-by: Robin Murphy <robin.murphy@arm.com> Tested-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com> Reviewed-by: Baoquan He <bhe@redhat.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Link: https://lore.kernel.org/r/c846b1a2f43295cac926c7af2ce907f62baec518.1768230104.git.robin.murphy@arm.com
This commit is contained in:
committed by
Marek Szyprowski
parent
7f2e8e1d22
commit
b31ac41b59
@@ -224,10 +224,10 @@ postcore_initcall(dma_atomic_pool_init);
|
||||
static inline struct gen_pool *dma_guess_pool(struct gen_pool *prev, gfp_t gfp)
|
||||
{
|
||||
if (prev == NULL) {
|
||||
if (IS_ENABLED(CONFIG_ZONE_DMA32) && (gfp & GFP_DMA32))
|
||||
return atomic_pool_dma32;
|
||||
if (atomic_pool_dma && (gfp & GFP_DMA))
|
||||
return atomic_pool_dma;
|
||||
if (gfp & GFP_DMA)
|
||||
return atomic_pool_dma ?: atomic_pool_dma32 ?: atomic_pool_kernel;
|
||||
if (gfp & GFP_DMA32)
|
||||
return atomic_pool_dma32 ?: atomic_pool_dma ?: atomic_pool_kernel;
|
||||
return atomic_pool_kernel;
|
||||
}
|
||||
if (prev == atomic_pool_kernel)
|
||||
|
||||
Reference in New Issue
Block a user