• Andrii Nakryiko's avatar
    bpf: Refactor BPF_PROG_RUN_ARRAY family of macros into functions · 7d08c2c9
    Andrii Nakryiko authored
    Similar to BPF_PROG_RUN, turn BPF_PROG_RUN_ARRAY macros into proper functions
    with all the same readability and maintainability benefits. Making them into
    functions required shuffling around bpf_set_run_ctx/bpf_reset_run_ctx
    functions. Also, explicitly specifying the type of the BPF prog run callback
    required adjusting __bpf_prog_run_save_cb() to accept const void *, casted
    internally to const struct sk_buff.
    
    Further, split out a cgroup-specific BPF_PROG_RUN_ARRAY_CG and
    BPF_PROG_RUN_ARRAY_CG_FLAGS from the more generic BPF_PROG_RUN_ARRAY due to
    the differences in bpf_run_ctx used for those two different use cases.
    
    I think BPF_PROG_RUN_ARRAY_CG would benefit from further refactoring to accept
    struct cgroup and enum bpf_attach_type instead of bpf_prog_array, fetching
    cgrp->bpf.effective[type] and RCU-dereferencing it internally. But that
    required including include/linux/cgroup-defs.h, which I wasn't sure is ok with
    everyone.
    
    The remaining generic BPF_PROG_RUN_ARRAY function will be extended to
    pass-through user-provided context value in the next patch.
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20210815070609.987780-3-andrii@kernel.org
    7d08c2c9
cgroup.c 51 KB