xref: /linux/include/linux/bpf_mem_alloc.h (revision 9f2c6e96)
17c8199e2SAlexei Starovoitov /* SPDX-License-Identifier: GPL-2.0-only */
27c8199e2SAlexei Starovoitov /* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */
37c8199e2SAlexei Starovoitov #ifndef _BPF_MEM_ALLOC_H
47c8199e2SAlexei Starovoitov #define _BPF_MEM_ALLOC_H
57c8199e2SAlexei Starovoitov #include <linux/compiler_types.h>
6*9f2c6e96SAlexei Starovoitov #include <linux/workqueue.h>
77c8199e2SAlexei Starovoitov 
87c8199e2SAlexei Starovoitov struct bpf_mem_cache;
97c8199e2SAlexei Starovoitov struct bpf_mem_caches;
107c8199e2SAlexei Starovoitov 
117c8199e2SAlexei Starovoitov struct bpf_mem_alloc {
127c8199e2SAlexei Starovoitov 	struct bpf_mem_caches __percpu *caches;
137c8199e2SAlexei Starovoitov 	struct bpf_mem_cache __percpu *cache;
14*9f2c6e96SAlexei Starovoitov 	struct work_struct work;
157c8199e2SAlexei Starovoitov };
167c8199e2SAlexei Starovoitov 
174ab67149SAlexei Starovoitov int bpf_mem_alloc_init(struct bpf_mem_alloc *ma, int size, bool percpu);
187c8199e2SAlexei Starovoitov void bpf_mem_alloc_destroy(struct bpf_mem_alloc *ma);
197c8199e2SAlexei Starovoitov 
207c8199e2SAlexei Starovoitov /* kmalloc/kfree equivalent: */
217c8199e2SAlexei Starovoitov void *bpf_mem_alloc(struct bpf_mem_alloc *ma, size_t size);
227c8199e2SAlexei Starovoitov void bpf_mem_free(struct bpf_mem_alloc *ma, void *ptr);
237c8199e2SAlexei Starovoitov 
247c8199e2SAlexei Starovoitov /* kmem_cache_alloc/free equivalent: */
257c8199e2SAlexei Starovoitov void *bpf_mem_cache_alloc(struct bpf_mem_alloc *ma);
267c8199e2SAlexei Starovoitov void bpf_mem_cache_free(struct bpf_mem_alloc *ma, void *ptr);
277c8199e2SAlexei Starovoitov 
287c8199e2SAlexei Starovoitov #endif /* _BPF_MEM_ALLOC_H */
29