1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */
3 #ifndef _BPF_MEM_ALLOC_H
4 #define _BPF_MEM_ALLOC_H
5 #include <linux/compiler_types.h>
6 #include <linux/workqueue.h>
7 
8 struct bpf_mem_cache;
9 struct bpf_mem_caches;
10 
11 struct bpf_mem_alloc {
12 	struct bpf_mem_caches __percpu *caches;
13 	struct bpf_mem_cache __percpu *cache;
14 	struct work_struct work;
15 };
16 
17 int bpf_mem_alloc_init(struct bpf_mem_alloc *ma, int size, bool percpu);
18 void bpf_mem_alloc_destroy(struct bpf_mem_alloc *ma);
19 
20 /* kmalloc/kfree equivalent: */
21 void *bpf_mem_alloc(struct bpf_mem_alloc *ma, size_t size);
22 void bpf_mem_free(struct bpf_mem_alloc *ma, void *ptr);
23 
24 /* kmem_cache_alloc/free equivalent: */
25 void *bpf_mem_cache_alloc(struct bpf_mem_alloc *ma);
26 void bpf_mem_cache_free(struct bpf_mem_alloc *ma, void *ptr);
27 
28 #endif /* _BPF_MEM_ALLOC_H */
29