Add io_bpf_buf_desc struct and io_bpf_buf_type enum to describe buffer parameters for IORING_OP_BPF kfuncs. Supports plain userspace, registered, vectored, and registered vectored buffer types. Registered buffers (FIXED, KFIXED, REG_VEC) refer to buffers pre-registered with io_uring and can be either userspace or kernel buffers depending on how they were registered. Signed-off-by: Ming Lei --- include/uapi/linux/io_uring.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 441a1038a58a..113d8c7b8e05 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -433,6 +433,33 @@ enum io_uring_op { #define IORING_BPF_OP_BITS 8 #define IORING_BPF_OP_SHIFT 24 +/* + * BPF buffer descriptor types. + * + * Registered buffers (FIXED, KFIXED, REG_VEC) refer to buffers pre-registered + * with io_uring. These can be either userspace or kernel buffers depending on + * how they were registered. + * + * For KFIXED, addr is an offset from the registered buffer start. + * For REG_VEC with kernel buffers, each iov.iov_base is offset-based. + */ +enum io_bpf_buf_type { + IO_BPF_BUF_USER = 0, /* plain userspace buffer */ + IO_BPF_BUF_FIXED = 1, /* registered buffer (absolute address) */ + IO_BPF_BUF_VEC = 2, /* vectored buffer (iovec array) */ + IO_BPF_BUF_KFIXED = 3, /* registered buffer (offset-based) */ + IO_BPF_BUF_REG_VEC = 4, /* registered vectored buffer */ +}; + +/* BPF buffer descriptor for IORING_OP_BPF */ +struct io_bpf_buf_desc { + __u8 type; /* IO_BPF_BUF_* */ + __u8 reserved; + __u16 buf_index; /* registered buffer index (FIXED/KFIXED/REG_VEC) */ + __u32 len; /* length (non-vec) or nr_vecs (vec types) */ + __u64 addr; /* userspace address, iovec ptr, or offset (KFIXED) */ +}; + /* * cqe.res for IORING_CQE_F_NOTIF if * IORING_SEND_ZC_REPORT_USAGE was requested -- 2.47.0