mm: drop VM_BUG_ON from __get_free_pages
There is no real reason to blow up just because the caller doesn't know that __get_free_pages cannot return highmem pages. Simply fix that up silently. Even if we have some confused users such a fixup will not be harmful. [akpm@linux-foundation.org: mask off __GFP_HIGHMEM] Link: http://lkml.kernel.org/r/20180622162841.25114-1-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Jiankang Chen <chenjiankang1@huawei.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Yisheng Xie <xieyisheng1@huawei.com> Cc: Hanjun Guo <guohanjun@huawei.com> Cc: Kefeng Wang <wangkefeng.wang@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
974e6d66b6
commit
9ea9a68064
@ -4404,19 +4404,15 @@ out:
|
||||
EXPORT_SYMBOL(__alloc_pages_nodemask);
|
||||
|
||||
/*
|
||||
* Common helper functions.
|
||||
* Common helper functions. Never use with __GFP_HIGHMEM because the returned
|
||||
* address cannot represent highmem pages. Use alloc_pages and then kmap if
|
||||
* you need to access high mem.
|
||||
*/
|
||||
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
|
||||
{
|
||||
struct page *page;
|
||||
|
||||
/*
|
||||
* __get_free_pages() returns a virtual address, which cannot represent
|
||||
* a highmem page
|
||||
*/
|
||||
VM_BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0);
|
||||
|
||||
page = alloc_pages(gfp_mask, order);
|
||||
page = alloc_pages(gfp_mask & ~__GFP_HIGHMEM, order);
|
||||
if (!page)
|
||||
return 0;
|
||||
return (unsigned long) page_address(page);
|
||||
|
Loading…
Reference in New Issue
Block a user