Commit 65182029 authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Linus Torvalds
Browse files

mm/cma: remove unsupported gfp_mask parameter from cma_alloc()

cma_alloc() doesn't really support gfp flags other than __GFP_NOWARN, so
convert gfp_mask parameter to boolean no_warn parameter.

This will help to avoid giving false feeling that this function supports
standard gfp flags and callers can pass __GFP_ZERO to get zeroed buffer,
what has already been an issue: see commit dd65a941 ("arm64:
dma-mapping: clear buffers allocated with FORCE_CONTIGUOUS flag").

Link: http://lkml.kernel.org/r/20180709122019eucas1p2340da484acfcc932537e6014f4fd2c29~-sqTPJKij2939229392eucas1p2j@eucas1p2.samsung.com


Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Acked-by: default avatarMichal Hocko <mhocko@suse.com>
Acked-by: default avatarMichał Nazarewicz <mina86@mina86.com>
Acked-by: default avatarLaura Abbott <labbott@redhat.com>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: Joonsoo Kim <js1304@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 50c150f2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ struct page *kvm_alloc_hpt_cma(unsigned long nr_pages)
	VM_BUG_ON(order_base_2(nr_pages) < KVM_CMA_CHUNK_ORDER - PAGE_SHIFT);

	return cma_alloc(kvm_cma, nr_pages, order_base_2(HPT_ALIGN_PAGES),
			 GFP_KERNEL);
			 false);
}
EXPORT_SYMBOL_GPL(kvm_alloc_hpt_cma);

+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ static void vmcp_response_alloc(struct vmcp_session *session)
	 * anymore the system won't work anyway.
	 */
	if (order > 2)
		page = cma_alloc(vmcp_cma, nr_pages, 0, GFP_KERNEL);
		page = cma_alloc(vmcp_cma, nr_pages, 0, false);
	if (page) {
		session->response = (char *)page_to_phys(page);
		session->cma_alloc = 1;
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
	if (align > CONFIG_CMA_ALIGNMENT)
		align = CONFIG_CMA_ALIGNMENT;

	pages = cma_alloc(cma_heap->cma, nr_pages, align, GFP_KERNEL);
	pages = cma_alloc(cma_heap->cma, nr_pages, align, false);
	if (!pages)
		return -ENOMEM;

+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ extern int cma_init_reserved_mem(phys_addr_t base, phys_addr_t size,
					const char *name,
					struct cma **res_cma);
extern struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
			      gfp_t gfp_mask);
			      bool no_warn);
extern bool cma_release(struct cma *cma, const struct page *pages, unsigned int count);

extern int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data);
+2 −1
Original line number Diff line number Diff line
@@ -191,7 +191,8 @@ struct page *dma_alloc_from_contiguous(struct device *dev, size_t count,
	if (align > CONFIG_CMA_ALIGNMENT)
		align = CONFIG_CMA_ALIGNMENT;

	return cma_alloc(dev_get_cma_area(dev), count, align, gfp_mask);
	return cma_alloc(dev_get_cma_area(dev), count, align,
			 gfp_mask & __GFP_NOWARN);
}

/**
Loading