diff options
Diffstat (limited to 'kernel/bpf/stackmap.c')
| -rw-r--r-- | kernel/bpf/stackmap.c | 20 | 
1 files changed, 8 insertions, 12 deletions
| diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index 732ae16d12b7..be8519148c25 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -7,7 +7,6 @@  #include <linux/bpf.h>  #include <linux/jhash.h>  #include <linux/filter.h> -#include <linux/vmalloc.h>  #include <linux/stacktrace.h>  #include <linux/perf_event.h>  #include "percpu_freelist.h" @@ -32,7 +31,7 @@ static int prealloc_elems_and_freelist(struct bpf_stack_map *smap)  	u32 elem_size = sizeof(struct stack_map_bucket) + smap->map.value_size;  	int err; -	smap->elems = vzalloc(elem_size * smap->map.max_entries); +	smap->elems = bpf_map_area_alloc(elem_size * smap->map.max_entries);  	if (!smap->elems)  		return -ENOMEM; @@ -45,7 +44,7 @@ static int prealloc_elems_and_freelist(struct bpf_stack_map *smap)  	return 0;  free_elems: -	vfree(smap->elems); +	bpf_map_area_free(smap->elems);  	return err;  } @@ -76,12 +75,9 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)  	if (cost >= U32_MAX - PAGE_SIZE)  		return ERR_PTR(-E2BIG); -	smap = kzalloc(cost, GFP_USER | __GFP_NOWARN); -	if (!smap) { -		smap = vzalloc(cost); -		if (!smap) -			return ERR_PTR(-ENOMEM); -	} +	smap = bpf_map_area_alloc(cost); +	if (!smap) +		return ERR_PTR(-ENOMEM);  	err = -E2BIG;  	cost += n_buckets * (value_size + sizeof(struct stack_map_bucket)); @@ -112,7 +108,7 @@ static struct bpf_map *stack_map_alloc(union bpf_attr *attr)  put_buffers:  	put_callchain_buffers();  free_smap: -	kvfree(smap); +	bpf_map_area_free(smap);  	return ERR_PTR(err);  } @@ -262,9 +258,9 @@ static void stack_map_free(struct bpf_map *map)  	/* wait for bpf programs to complete before freeing stack map */  	synchronize_rcu(); -	vfree(smap->elems); +	bpf_map_area_free(smap->elems);  	pcpu_freelist_destroy(&smap->freelist); -	kvfree(smap); +	bpf_map_area_free(smap);  	put_callchain_buffers();  } | 
