mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
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/[email protected] Signed-off-by: Michal Hocko <[email protected]> Reviewed-by: Matthew Wilcox <[email protected]> Cc: Al Viro <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: David Rientjes <[email protected]> Cc: Cristopher Lameter <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
54f180d3c1
commit
19809c2da2
20 changed files with 31 additions and 41 deletions
|
|
@ -691,7 +691,7 @@ int kasan_module_alloc(void *addr, size_t size)
|
|||
|
||||
ret = __vmalloc_node_range(shadow_size, 1, shadow_start,
|
||||
shadow_start + shadow_size,
|
||||
GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
PAGE_KERNEL, VM_NO_GUARD, NUMA_NO_NODE,
|
||||
__builtin_return_address(0));
|
||||
|
||||
|
|
|
|||
|
|
@ -246,8 +246,7 @@ void *vmalloc_user(unsigned long size)
|
|||
{
|
||||
void *ret;
|
||||
|
||||
ret = __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
|
||||
PAGE_KERNEL);
|
||||
ret = __vmalloc(size, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL);
|
||||
if (ret) {
|
||||
struct vm_area_struct *vma;
|
||||
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node)
|
|||
if (ret || size <= PAGE_SIZE)
|
||||
return ret;
|
||||
|
||||
return __vmalloc_node_flags(size, node, flags | __GFP_HIGHMEM);
|
||||
return __vmalloc_node_flags(size, node, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(kvmalloc_node);
|
||||
|
||||
|
|
|
|||
14
mm/vmalloc.c
14
mm/vmalloc.c
|
|
@ -1655,7 +1655,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
|
|||
struct page **pages;
|
||||
unsigned int nr_pages, array_size, i;
|
||||
const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
|
||||
const gfp_t alloc_mask = gfp_mask | __GFP_NOWARN;
|
||||
const gfp_t alloc_mask = gfp_mask | __GFP_HIGHMEM | __GFP_NOWARN;
|
||||
|
||||
nr_pages = get_vm_area_size(area) >> PAGE_SHIFT;
|
||||
array_size = (nr_pages * sizeof(struct page *));
|
||||
|
|
@ -1818,7 +1818,7 @@ EXPORT_SYMBOL(__vmalloc);
|
|||
void *vmalloc(unsigned long size)
|
||||
{
|
||||
return __vmalloc_node_flags(size, NUMA_NO_NODE,
|
||||
GFP_KERNEL | __GFP_HIGHMEM);
|
||||
GFP_KERNEL);
|
||||
}
|
||||
EXPORT_SYMBOL(vmalloc);
|
||||
|
||||
|
|
@ -1835,7 +1835,7 @@ EXPORT_SYMBOL(vmalloc);
|
|||
void *vzalloc(unsigned long size)
|
||||
{
|
||||
return __vmalloc_node_flags(size, NUMA_NO_NODE,
|
||||
GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
|
||||
GFP_KERNEL | __GFP_ZERO);
|
||||
}
|
||||
EXPORT_SYMBOL(vzalloc);
|
||||
|
||||
|
|
@ -1852,7 +1852,7 @@ void *vmalloc_user(unsigned long size)
|
|||
void *ret;
|
||||
|
||||
ret = __vmalloc_node(size, SHMLBA,
|
||||
GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
|
||||
GFP_KERNEL | __GFP_ZERO,
|
||||
PAGE_KERNEL, NUMA_NO_NODE,
|
||||
__builtin_return_address(0));
|
||||
if (ret) {
|
||||
|
|
@ -1876,7 +1876,7 @@ EXPORT_SYMBOL(vmalloc_user);
|
|||
*/
|
||||
void *vmalloc_node(unsigned long size, int node)
|
||||
{
|
||||
return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL,
|
||||
return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL,
|
||||
node, __builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(vmalloc_node);
|
||||
|
|
@ -1896,7 +1896,7 @@ EXPORT_SYMBOL(vmalloc_node);
|
|||
void *vzalloc_node(unsigned long size, int node)
|
||||
{
|
||||
return __vmalloc_node_flags(size, node,
|
||||
GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO);
|
||||
GFP_KERNEL | __GFP_ZERO);
|
||||
}
|
||||
EXPORT_SYMBOL(vzalloc_node);
|
||||
|
||||
|
|
@ -1918,7 +1918,7 @@ EXPORT_SYMBOL(vzalloc_node);
|
|||
|
||||
void *vmalloc_exec(unsigned long size)
|
||||
{
|
||||
return __vmalloc_node(size, 1, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC,
|
||||
return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL_EXEC,
|
||||
NUMA_NO_NODE, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue