• Martin KaFai Lau's avatar
    bpf: Add a few bpf mem allocator functions · e65a5c6e
    Martin KaFai Lau authored
    This patch adds a few bpf mem allocator functions which will
    be used in the bpf_local_storage in a later patch.
    
    bpf_mem_cache_alloc_flags(..., gfp_t flags) is added. When the
    flags == GFP_KERNEL, it will fallback to __alloc(..., GFP_KERNEL).
    bpf_local_storage knows its running context is sleepable (GFP_KERNEL)
    and provides a better guarantee on memory allocation.
    
    bpf_local_storage has some uncommon cases that its selem
    cannot be reused immediately. It handles its own
    rcu_head and goes through a rcu_trace gp and then free it.
    bpf_mem_cache_raw_free() is added for direct free purpose
    without leaking the LLIST_NODE_SZ internal knowledge.
    During free time, the 'struct bpf_mem_alloc *ma' is no longer
    available. However, the caller should know if it is
    percpu memory or not and it can call different raw_free functions.
    bpf_local_storage does not support percpu value, so only
    the non-percpu 'bpf_mem_cache_raw_free()' is added in
    this patch.
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20230322215246.1675516-2-martin.lau@linux.devSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    e65a5c6e
memalloc.c 19.7 KB