io_uring/zcrx: add interface queue and refill queue
authorDavid Wei <dw@davidwei.uk>
Sat, 15 Feb 2025 00:09:36 +0000 (16:09 -0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Feb 2025 12:41:03 +0000 (05:41 -0700)
commit6f377873cb23905009759b7366b9fe85c2a6ff37
tree174674c6e7cc5055cdf90ccdc99e7b3032c57483
parent5c496ff11df179c32db960cf10af90a624a035eb
io_uring/zcrx: add interface queue and refill queue

Add a new object called an interface queue (ifq) that represents a net
rx queue that has been configured for zero copy. Each ifq is registered
using a new registration opcode IORING_REGISTER_ZCRX_IFQ.

The refill queue is allocated by the kernel and mapped by userspace
using a new offset IORING_OFF_RQ_RING, in a similar fashion to the main
SQ/CQ. It is used by userspace to return buffers that it is done with,
which will then be re-used by the netdev again.

The main CQ ring is used to notify userspace of received data by using
the upper 16 bytes of a big CQE as a new struct io_uring_zcrx_cqe. Each
entry contains the offset + len to the data.

For now, each io_uring instance only has a single ifq.

Reviewed-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: David Wei <dw@davidwei.uk>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/r/20250215000947.789731-2-dw@davidwei.uk
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Kconfig
include/linux/io_uring_types.h
include/uapi/linux/io_uring.h
io_uring/KConfig [new file with mode: 0644]
io_uring/Makefile
io_uring/io_uring.c
io_uring/memmap.h
io_uring/register.c
io_uring/zcrx.c [new file with mode: 0644]
io_uring/zcrx.h [new file with mode: 0644]