HI, On 10/11/2024 5:50 AM, Andrii Nakryiko wrote: > On Tue, Oct 8, 2024 at 2:02 AM Hou Tao <houtao@xxxxxxxxxxxxxxx> wrote: >> From: Hou Tao <houtao1@xxxxxxxxxx> >> >> For bpf map with dynptr key support, the userspace application will use >> bpf_dynptr_user to represent the bpf_dynptr in the map key and pass it >> to bpf syscall. The bpf syscall will copy from bpf_dynptr_user to >> construct a corresponding bpf_dynptr_kern object when the map key is an >> input argument, and copy to bpf_dynptr_user from a bpf_dynptr_kern >> object when the map key is an output argument. >> >> For now the size of bpf_dynptr_user must be the same as bpf_dynptr, but >> the last u32 field is not used, so make it a reserved field. >> >> Signed-off-by: Hou Tao <houtao1@xxxxxxxxxx> >> --- >> include/uapi/linux/bpf.h | 6 ++++++ >> tools/include/uapi/linux/bpf.h | 6 ++++++ >> 2 files changed, 12 insertions(+) >> >> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h >> index 07f7df308a01..72fe6a96b54c 100644 >> --- a/include/uapi/linux/bpf.h >> +++ b/include/uapi/linux/bpf.h >> @@ -7329,6 +7329,12 @@ struct bpf_dynptr { >> __u64 __opaque[2]; >> } __attribute__((aligned(8))); >> >> +struct bpf_dynptr_user { > bikeshedding: maybe just bpf_udynptr? > >> + __u64 data; >> + __u32 size; >> + __u32 rsvd; >> +} __attribute__((aligned(8))); >> + >> struct bpf_list_head { >> __u64 __opaque[2]; >> } __attribute__((aligned(8))); >> diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h >> index 14f223282bfa..f12ce268e6be 100644 >> --- a/tools/include/uapi/linux/bpf.h >> +++ b/tools/include/uapi/linux/bpf.h >> @@ -7328,6 +7328,12 @@ struct bpf_dynptr { >> __u64 __opaque[2]; >> } __attribute__((aligned(8))); >> >> +struct bpf_dynptr_user { >> + __u64 data; > what if we use __bpf_md_ptr(void *, data), so users can just directly > use this struct (and then the next patch won't be necessary at all) Thanks for the suggestion. Will do in v2. >> + __u32 size; >> + __u32 rsvd; > please call it __reserved Got it. > > >> +} __attribute__((aligned(8))); >> + >> struct bpf_list_head { >> __u64 __opaque[2]; >> } __attribute__((aligned(8))); >> -- >> 2.44.0 >>