summaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2017-02-24 17:58:41 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-02-24 20:46:55 -0500
commite2f466e32f56c8b3ee0d1a40cc39e1c779dfd598 (patch)
treef37685b18f07689ed884b912f226b9a19c320e7a /mm
parentca96b625341027f611c3e61351a70311077ebcf5 (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.c5
-rw-r--r--mm/cma_debug.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/mm/cma.c b/mm/cma.c
index c6aed23ca6df..2906ae5a83ff 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -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 */
360struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align) 360struct 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;