• Dave Marchevsky's avatar
    bpf: Introduce internal definitions for UAPI-opaque bpf_{rb,list}_node · 0a1f7bfe
    Dave Marchevsky authored
    Structs bpf_rb_node and bpf_list_node are opaquely defined in
    uapi/linux/bpf.h, as BPF program writers are not expected to touch their
    fields - nor does the verifier allow them to do so.
    
    Currently these structs are simple wrappers around structs rb_node and
    list_head and linked_list / rbtree implementation just casts and passes
    to library functions for those data structures. Later patches in this
    series, though, will add an "owner" field to bpf_{rb,list}_node, such
    that they're not just wrapping an underlying node type. Moreover, the
    bpf linked_list and rbtree implementations will deal with these owner
    pointers directly in a few different places.
    
    To avoid having to do
    
      void *owner = (void*)bpf_list_node + sizeof(struct list_head)
    
    with opaque UAPI node types, add bpf_{list,rb}_node_kern struct
    definitions to internal headers and modify linked_list and rbtree to use
    the internal types where appropriate.
    Signed-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Link: https://lore.kernel.org/r/20230718083813.3416104-3-davemarchevsky@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    0a1f7bfe
helpers.c 65.3 KB