On Wed 28-06-17 23:24:10, Mikulas Patocka wrote: [...] > From: Mikulas Patocka <mpatocka@xxxxxxxxxx> > > The patch a7c3e901 ("mm: introduce kv[mz]alloc helpers") converted a lot > of kernel code to kvmalloc. This patch converts three more forgotten > cases. Thanks! I have two remarks below but other than that feel free to add > Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> [...] > Index: linux-2.6/kernel/bpf/syscall.c > =================================================================== > --- linux-2.6.orig/kernel/bpf/syscall.c > +++ linux-2.6/kernel/bpf/syscall.c > @@ -58,16 +58,7 @@ void *bpf_map_area_alloc(size_t size) > * trigger under memory pressure as we really just want to > * fail instead. > */ > - const gfp_t flags = __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO; > - void *area; > - > - if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) { > - area = kmalloc(size, GFP_USER | flags); > - if (area != NULL) > - return area; > - } > - > - return __vmalloc(size, GFP_KERNEL | flags, PAGE_KERNEL); > + return kvmalloc(size, GFP_USER | __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO); kvzalloc without additional flags would be more appropriate. __GFP_NORETRY is explicitly documented as non-supported and NOWARN wouldn't be applied everywhere in the vmalloc path. > } > > void bpf_map_area_free(void *area) > Index: linux-2.6/kernel/cgroup/cgroup-v1.c > =================================================================== > --- linux-2.6.orig/kernel/cgroup/cgroup-v1.c > +++ linux-2.6/kernel/cgroup/cgroup-v1.c > @@ -184,15 +184,10 @@ struct cgroup_pidlist { > /* > * The following two functions "fix" the issue where there are more pids > * than kmalloc will give memory for; in such cases, we use vmalloc/vfree. > - * TODO: replace with a kernel-wide solution to this problem > */ > -#define PIDLIST_TOO_LARGE(c) ((c) * sizeof(pid_t) > (PAGE_SIZE * 2)) > static void *pidlist_allocate(int count) > { > - if (PIDLIST_TOO_LARGE(count)) > - return vmalloc(count * sizeof(pid_t)); > - else > - return kmalloc(count * sizeof(pid_t), GFP_KERNEL); > + return kvmalloc(count * sizeof(pid_t), GFP_KERNEL); > } I would rather use kvmalloc_array to have an overflow protection as well. > > static void pidlist_free(void *p) -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>