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