diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2017-02-24 17:58:41 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-02-24 20:46:55 -0500 |
commit | e2f466e32f56c8b3ee0d1a40cc39e1c779dfd598 (patch) | |
tree | f37685b18f07689ed884b912f226b9a19c320e7a /mm | |
parent | ca96b625341027f611c3e61351a70311077ebcf5 (diff) |
mm: cma_alloc: allow to specify GFP mask
Most users of this interface just want to use it with the default
GFP_KERNEL flags, but for cases where DMA memory is allocated it may be
called from a different context.
No functional change yet, just passing through the flag to the
underlying alloc_contig_range function.
Link: http://lkml.kernel.org/r/20170127172328.18574-2-l.stach@pengutronix.de
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Radim Krcmar <rkrcmar@redhat.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Chris Zankel <chris@zankel.net>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Alexander Graf <agraf@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/cma.c | 5 | ||||
-rw-r--r-- | mm/cma_debug.c | 2 |
2 files changed, 4 insertions, 3 deletions
@@ -357,7 +357,8 @@ err: | |||
357 | * This function allocates part of contiguous memory on specific | 357 | * This function allocates part of contiguous memory on specific |
358 | * contiguous memory area. | 358 | * contiguous memory area. |
359 | */ | 359 | */ |
360 | struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) | 360 | struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, |
361 | gfp_t gfp_mask) | ||
361 | { | 362 | { |
362 | unsigned long mask, offset; | 363 | unsigned long mask, offset; |
363 | unsigned long pfn = -1; | 364 | unsigned long pfn = -1; |
@@ -403,7 +404,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) | |||
403 | pfn = cma->base_pfn + (bitmap_no << cma->order_per_bit); | 404 | pfn = cma->base_pfn + (bitmap_no << cma->order_per_bit); |
404 | mutex_lock(&cma_mutex); | 405 | mutex_lock(&cma_mutex); |
405 | ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA, | 406 | ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA, |
406 | GFP_KERNEL); | 407 | gfp_mask); |
407 | mutex_unlock(&cma_mutex); | 408 | mutex_unlock(&cma_mutex); |
408 | if (ret == 0) { | 409 | if (ret == 0) { |
409 | page = pfn_to_page(pfn); | 410 | page = pfn_to_page(pfn); |
diff --git a/mm/cma_debug.c b/mm/cma_debug.c index f8e4b60db167..ffc0c3d0ae64 100644 --- a/mm/cma_debug.c +++ b/mm/cma_debug.c | |||
@@ -138,7 +138,7 @@ static int cma_alloc_mem(struct cma *cma, int count) | |||
138 | if (!mem) | 138 | if (!mem) |
139 | return -ENOMEM; | 139 | return -ENOMEM; |
140 | 140 | ||
141 | p = cma_alloc(cma, count, 0); | 141 | p = cma_alloc(cma, count, 0, GFP_KERNEL); |
142 | if (!p) { | 142 | if (!p) { |
143 | kfree(mem); | 143 | kfree(mem); |
144 | return -ENOMEM; | 144 | return -ENOMEM; |