Lines Matching refs:dma_pool
85 static int atomic_pool_expand(struct dma_gen_pool *dma_pool, size_t pool_size, in atomic_pool_expand() argument
112 if (dma_pool->cc_shared) in atomic_pool_expand()
128 if (dma_pool->cc_shared) { in atomic_pool_expand()
137 ret = gen_pool_add_virt(dma_pool->pool, (unsigned long)addr, in atomic_pool_expand()
146 if (dma_pool->cc_shared && in atomic_pool_expand()
161 static void atomic_pool_resize(struct dma_gen_pool *dma_pool, gfp_t gfp) in atomic_pool_resize() argument
163 if (dma_pool->pool && gen_pool_avail(dma_pool->pool) < atomic_pool_size) in atomic_pool_resize()
164 atomic_pool_expand(dma_pool, gen_pool_size(dma_pool->pool), gfp); in atomic_pool_resize()
178 static __init struct dma_gen_pool *__dma_atomic_pool_init(struct dma_gen_pool *dma_pool, in __dma_atomic_pool_init() argument
183 dma_pool->pool = gen_pool_create(PAGE_SHIFT, NUMA_NO_NODE); in __dma_atomic_pool_init()
184 if (!dma_pool->pool) in __dma_atomic_pool_init()
187 gen_pool_set_algo(dma_pool->pool, gen_pool_first_fit_order_align, NULL); in __dma_atomic_pool_init()
191 dma_pool->cc_shared = true; in __dma_atomic_pool_init()
193 dma_pool->cc_shared = false; in __dma_atomic_pool_init()
195 ret = atomic_pool_expand(dma_pool, pool_size, gfp); in __dma_atomic_pool_init()
197 gen_pool_destroy(dma_pool->pool); in __dma_atomic_pool_init()
198 dma_pool->pool = NULL; in __dma_atomic_pool_init()
205 gen_pool_size(dma_pool->pool) >> 10, &gfp); in __dma_atomic_pool_init()
206 return dma_pool; in __dma_atomic_pool_init()
326 struct dma_gen_pool *dma_pool = NULL; in dma_alloc_from_pool() local
330 while ((dma_pool = dma_guess_pool(dma_pool, gfp))) { in dma_alloc_from_pool()
332 if (dma_pool->cc_shared != !!(attrs & __DMA_ATTR_ALLOC_CC_SHARED)) in dma_alloc_from_pool()
336 page = __dma_alloc_from_pool(dev, size, dma_pool->pool, cpu_addr, in dma_alloc_from_pool()
351 struct dma_gen_pool *dma_pool = NULL; in dma_free_from_pool() local
353 while ((dma_pool = dma_guess_pool(dma_pool, 0))) { in dma_free_from_pool()
355 if (!gen_pool_has_addr(dma_pool->pool, (unsigned long)start, size)) in dma_free_from_pool()
358 gen_pool_free(dma_pool->pool, (unsigned long)start, size); in dma_free_from_pool()
390 static bool dma_free_from_pool_phys(struct dma_gen_pool *dma_pool, phys_addr_t phys, in dma_free_from_pool_phys() argument
398 gen_pool_for_each_chunk(dma_pool->pool, dma_pool_find_phys, &match); in dma_free_from_pool_phys()
402 gen_pool_free(dma_pool->pool, match.addr, size); in dma_free_from_pool_phys()
412 struct dma_gen_pool *dma_pool = NULL; in dma_free_from_pool_page() local
418 while ((dma_pool = dma_guess_pool(dma_pool, 0))) { in dma_free_from_pool_page()
419 if (dma_free_from_pool_phys(dma_pool, phys, size)) in dma_free_from_pool_page()