On Thu, Oct 14, 2021 at 03:34:31PM +0100, Lorenz Bauer wrote: > --- > include/uapi/linux/bpf.h | 51 +++++++++++++++++++++++------ > kernel/bpf/syscall.c | 70 ++++++++++++++++------------------------ > 2 files changed, 70 insertions(+), 51 deletions(-) > > diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h > index f1c163778d7a..d3acd12d98c1 100644 > --- a/include/uapi/linux/bpf.h > +++ b/include/uapi/linux/bpf.h > @@ -1294,18 +1294,41 @@ struct bpf_map_create_attr { > */ > }; > > +struct bpf_map_lookup_elem_attr { > + __u32 map_fd; > + __bpf_md_ptr(const void *, key); > + __bpf_md_ptr(void *, value); > + __u64 flags; > +}; > + > +struct bpf_map_update_elem_attr { > + __u32 map_fd; > + __bpf_md_ptr(const void *, key); > + __bpf_md_ptr(void *, value); > + __u64 flags; > +}; > + > +struct bpf_map_delete_elem_attr { > + __u32 map_fd; > + __bpf_md_ptr(const void *, key); > +}; > + > +struct bpf_map_get_next_key_attr { > + __u32 map_fd; > + __bpf_md_ptr(const void *, key); > + __bpf_md_ptr(void *, next_key); > +}; > + > union bpf_attr { > struct bpf_map_create_attr map_create; > > - struct { /* anonymous struct used by BPF_MAP_*_ELEM commands */ > - __u32 map_fd; > - __aligned_u64 key; > - union { > - __aligned_u64 value; > - __aligned_u64 next_key; > - }; > - __u64 flags; > - }; > + struct bpf_map_lookup_elem_attr map_lookup_elem; > + > + struct bpf_map_update_elem_attr map_update_elem; > + > + struct bpf_map_delete_elem_attr map_delete_elem; > + > + struct bpf_map_get_next_key_attr map_get_next_key; I think such additions to bpf_attr are good. They do make it the interface more obvious. But please don't move or delete the existing anon struct. Adding 'deprecated' comment won't make it deprecated. It will be used regardless. If we ever extend 'map_lookup' command we might even add fields to both. tbd.