aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmalloc.c
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.com>2017-05-08 18:57:44 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-08 20:15:13 -0400
commit19809c2da28aee5860ad9a2eff760730a0710df0 (patch)
tree19c6c68f96d55ea25b71040a448c6890301a19f6 /mm/vmalloc.c
parent54f180d3c181277457fb003dd9524c2aa1ef8160 (diff)
mm, vmalloc: use __GFP_HIGHMEM implicitly
__vmalloc* allows users to provide gfp flags for the underlying allocation. This API is quite popular $ git grep "=[[:space:]]__vmalloc\|return[[:space:]]*__vmalloc" | wc -l 77 The only problem is that many people are not aware that they really want to give __GFP_HIGHMEM along with other flags because there is really no reason to consume precious lowmemory on CONFIG_HIGHMEM systems for pages which are mapped to the kernel vmalloc space. About half of users don't use this flag, though. This signals that we make the API unnecessarily too complex. This patch simply uses __GFP_HIGHMEM implicitly when allocating pages to be mapped to the vmalloc space. Current users which add __GFP_HIGHMEM are simplified and drop the flag. Link: http://lkml.kernel.org/r/20170307141020.29107-1-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Matthew Wilcox <mawilcox@microsoft.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: David Rientjes <rientjes@google.com> Cc: Cristopher Lameter <cl@linux.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmalloc.c')
-rw-r--r--mm/vmalloc.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 717b1e8b942c..1dda6d8a200a 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1655,7 +1655,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
1655 struct page **pages; 1655 struct page **pages;
1656 unsigned int nr_pages, array_size, i; 1656 unsigned int nr_pages, array_size, i;
1657 const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; 1657 const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
1658 const gfp_t alloc_mask = gfp_mask | __GFP_NOWARN; 1658 const gfp_t alloc_mask = gfp_mask | __GFP_HIGHMEM | __GFP_NOWARN;
1659 1659
1660 nr_pages = get_vm_area_size(area) >> PAGE_SHIFT; 1660 nr_pages = get_vm_area_size(area) >> PAGE_SHIFT;
1661 array_size = (nr_pages * sizeof(struct page *)); 1661 array_size = (nr_pages * sizeof(struct page *));
@@ -1818,7 +1818,7 @@ EXPORT_SYMBOL(__vmalloc);
1818void *vmalloc(unsigned long size) 1818void *vmalloc(unsigned long size)
1819{ 1819{
1820 return __vmalloc_node_flags(size, NUMA_NO_NODE, 1820 return __vmalloc_node_flags(size, NUMA_NO_NODE,
1821 GFP_KERNEL | __GFP_HIGHMEM); 1821 GFP_KERNEL);
1822} 1822}
1823EXPORT_SYMBOL(vmalloc); 1823EXPORT_SYMBOL(vmalloc);
1824 1824
@@ -1835,7 +1835,7 @@ EXPORT_SYMBOL(vmalloc);
1835void *vzalloc(unsigned long size) 1835void *vzalloc(unsigned long size)
1836{ 1836{
1837 return __vmalloc_node_flags(size, NUMA_NO_NODE, 1837 return __vmalloc_node_flags(size, NUMA_NO_NODE,
1838 GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO); 1838 GFP_KERNEL | __GFP_ZERO);
1839} 1839}
1840EXPORT_SYMBOL(vzalloc); 1840EXPORT_SYMBOL(vzalloc);
1841 1841
@@ -1852,7 +1852,7 @@ void *vmalloc_user(unsigned long size)
1852 void *ret; 1852 void *ret;
1853 1853
1854 ret = __vmalloc_node(size, SHMLBA, 1854 ret = __vmalloc_node(size, SHMLBA,
1855 GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, 1855 GFP_KERNEL | __GFP_ZERO,
1856 PAGE_KERNEL, NUMA_NO_NODE, 1856 PAGE_KERNEL, NUMA_NO_NODE,
1857 __builtin_return_address(0)); 1857 __builtin_return_address(0));
1858 if (ret) { 1858 if (ret) {
@@ -1876,7 +1876,7 @@ EXPORT_SYMBOL(vmalloc_user);
1876 */ 1876 */
1877void *vmalloc_node(unsigned long size, int node) 1877void *vmalloc_node(unsigned long size, int node)
1878{ 1878{
1879 return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL, 1879 return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL,
1880 node, __builtin_return_address(0)); 1880 node, __builtin_return_address(0));
1881} 1881}
1882EXPORT_SYMBOL(vmalloc_node); 1882EXPORT_SYMBOL(vmalloc_node);
@@ -1896,7 +1896,7 @@ EXPORT_SYMBOL(vmalloc_node);
1896void *vzalloc_node(unsigned long size, int node) 1896void *vzalloc_node(unsigned long size, int node)
1897{ 1897{
1898 return __vmalloc_node_flags(size, node, 1898 return __vmalloc_node_flags(size, node,
1899 GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO); 1899 GFP_KERNEL | __GFP_ZERO);
1900} 1900}
1901EXPORT_SYMBOL(vzalloc_node); 1901EXPORT_SYMBOL(vzalloc_node);
1902 1902
@@ -1918,7 +1918,7 @@ EXPORT_SYMBOL(vzalloc_node);
1918 1918
1919void *vmalloc_exec(unsigned long size) 1919void *vmalloc_exec(unsigned long size)
1920{ 1920{
1921 return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC, 1921 return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL_EXEC,
1922 NUMA_NO_NODE, __builtin_return_address(0)); 1922 NUMA_NO_NODE, __builtin_return_address(0));
1923} 1923}
1924 1924