|
@@ -349,7 +349,7 @@ static void __dma_free_buffer(struct page *page, size_t size)
|
|
|
static void *__alloc_from_contiguous(struct device *dev, size_t size,
|
|
|
pgprot_t prot, struct page **ret_page,
|
|
|
const void *caller, bool want_vaddr,
|
|
|
- int coherent_flag);
|
|
|
+ int coherent_flag, gfp_t gfp);
|
|
|
|
|
|
static void *__alloc_remap_buffer(struct device *dev, size_t size, gfp_t gfp,
|
|
|
pgprot_t prot, struct page **ret_page,
|
|
@@ -420,7 +420,8 @@ static int __init atomic_pool_init(void)
|
|
|
*/
|
|
|
if (dev_get_cma_area(NULL))
|
|
|
ptr = __alloc_from_contiguous(NULL, atomic_pool_size, prot,
|
|
|
- &page, atomic_pool_init, true, NORMAL);
|
|
|
+ &page, atomic_pool_init, true, NORMAL,
|
|
|
+ GFP_KERNEL);
|
|
|
else
|
|
|
ptr = __alloc_remap_buffer(NULL, atomic_pool_size, gfp, prot,
|
|
|
&page, atomic_pool_init, true);
|
|
@@ -594,14 +595,14 @@ static int __free_from_pool(void *start, size_t size)
|
|
|
static void *__alloc_from_contiguous(struct device *dev, size_t size,
|
|
|
pgprot_t prot, struct page **ret_page,
|
|
|
const void *caller, bool want_vaddr,
|
|
|
- int coherent_flag)
|
|
|
+ int coherent_flag, gfp_t gfp)
|
|
|
{
|
|
|
unsigned long order = get_order(size);
|
|
|
size_t count = size >> PAGE_SHIFT;
|
|
|
struct page *page;
|
|
|
void *ptr = NULL;
|
|
|
|
|
|
- page = dma_alloc_from_contiguous(dev, count, order);
|
|
|
+ page = dma_alloc_from_contiguous(dev, count, order, gfp);
|
|
|
if (!page)
|
|
|
return NULL;
|
|
|
|
|
@@ -655,7 +656,7 @@ static inline pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot)
|
|
|
#define __get_dma_pgprot(attrs, prot) __pgprot(0)
|
|
|
#define __alloc_remap_buffer(dev, size, gfp, prot, ret, c, wv) NULL
|
|
|
#define __alloc_from_pool(size, ret_page) NULL
|
|
|
-#define __alloc_from_contiguous(dev, size, prot, ret, c, wv, coherent_flag) NULL
|
|
|
+#define __alloc_from_contiguous(dev, size, prot, ret, c, wv, coherent_flag, gfp) NULL
|
|
|
#define __free_from_pool(cpu_addr, size) do { } while (0)
|
|
|
#define __free_from_contiguous(dev, page, cpu_addr, size, wv) do { } while (0)
|
|
|
#define __dma_free_remap(cpu_addr, size) do { } while (0)
|
|
@@ -697,7 +698,8 @@ static void *cma_allocator_alloc(struct arm_dma_alloc_args *args,
|
|
|
{
|
|
|
return __alloc_from_contiguous(args->dev, args->size, args->prot,
|
|
|
ret_page, args->caller,
|
|
|
- args->want_vaddr, args->coherent_flag);
|
|
|
+ args->want_vaddr, args->coherent_flag,
|
|
|
+ args->gfp);
|
|
|
}
|
|
|
|
|
|
static void cma_allocator_free(struct arm_dma_free_args *args)
|
|
@@ -1312,7 +1314,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size,
|
|
|
unsigned long order = get_order(size);
|
|
|
struct page *page;
|
|
|
|
|
|
- page = dma_alloc_from_contiguous(dev, count, order);
|
|
|
+ page = dma_alloc_from_contiguous(dev, count, order, gfp);
|
|
|
if (!page)
|
|
|
goto error;
|
|
|
|