]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
io_uring/bpf-ops: add kfunc helpers
authorPavel Begunkov <asml.silence@gmail.com>
Thu, 26 Feb 2026 12:48:40 +0000 (12:48 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 16 Mar 2026 22:15:00 +0000 (16:15 -0600)
commit890819248a8616558fe12e6c06c918ee1c3a2bc6
tree4daedf885608a85b4ba25991876e46a77a365b0a
parentd0e437b76bd3c979ddaa6205f5e9ad3e0f95faef
io_uring/bpf-ops: add kfunc helpers

Add two kfuncs that should cover most of the needs:

1. bpf_io_uring_submit_sqes(), which allows to submit io_uring requests.
   It mirrors the normal user space submission path and follows all
   related io_uring_enter(2) rules. i.e. SQEs are taken from the SQ
   according to head/tail values. In case of IORING_SETUP_SQ_REWIND,
   it'll submit first N entries.

2. bpf_io_uring_get_region() returns a pointer to the specified region,
   where io_uring regions are kernel-userspace shared chunks of memory.
   It takes the size as an argument, which should be a load time
   constant. There are 3 types of regions:
   - IOU_REGION_SQ returns the submission queue.
   - IOU_REGION_CQ stores the CQ, SQ/CQ headers and the sqarray. In
     other words, it gives same memory that would normally be mmap'ed
     with IORING_FEAT_SINGLE_MMAP enabled IORING_OFF_SQ_RING.
   - IOU_REGION_MEM represents the memory / parameter region. It can be
     used to store request indirect parameters and for kernel - user
     communication.

It intentionally provides a thin but flexible API and expects BPF
programs to implement CQ/SQ header parsing, CQ walking, etc. That
mirrors how the normal user space works with rings and should help
to minimise kernel / kfunc helpers changes while introducing new generic
io_uring features.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://patch.msgid.link/967bcc10e94c796eb273998621551b2a21848cde.1772109579.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/bpf-ops.c
io_uring/bpf-ops.h