]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
io_uring: add support for IORING_SETUP_SQE_MIXED
authorKeith Busch <kbusch@kernel.org>
Thu, 16 Oct 2025 18:09:38 +0000 (11:09 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 22 Oct 2025 13:34:57 +0000 (07:34 -0600)
commit1cba30bf9fdd6c982708f3587f609a30c370d889
tree4fd436dd1317c70f35eced5cb93b0b2fe857f9ff
parent5b6d8a032e807c48a843fb81d9e3d74391f731ea
io_uring: add support for IORING_SETUP_SQE_MIXED

Normal rings support 64b SQEs for posting submissions, while certain
features require the ring to be configured with IORING_SETUP_SQE128, as
they need to convey more information per submission. This, in turn,
makes ALL the SQEs be 128b in size. This is somewhat wasteful and
inefficient, particularly when only certain SQEs need to be of the
bigger variant.

This adds support for setting up a ring with mixed SQE sizes, using
IORING_SETUP_SQE_MIXED. When setup in this mode, SQEs posted to the ring
may be either 64b or 128b in size. If a SQE is 128b in size, then opcode
will be set to a variante to indicate that this is the case. Any other
non-128b opcode will assume the SQ's default size.

SQEs on these types of mixed rings may also utilize NOP with skip
success set.  This can happen if the ring is one (small) SQE entry away
from wrapping, and an attempt is made to get a 128b SQE. As SQEs must be
contiguous in the SQ ring, a 128b SQE cannot wrap the ring. For this
case, a single NOP SQE should be inserted with the SKIP_SUCCESS flag
set. The kernel will process this as a normal NOP and without posting a
CQE.

Signed-off-by: Keith Busch <kbusch@kernel.org>
[axboe: {} style fix and assign sqe before opcode read]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/uapi/linux/io_uring.h
io_uring/fdinfo.c
io_uring/io_uring.c
io_uring/io_uring.h
io_uring/opdef.c
io_uring/opdef.h
io_uring/register.c
io_uring/uring_cmd.c