diff options
| author | Jens Axboe <axboe@kernel.dk> | 2025-11-13 11:18:19 -0700 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2025-11-13 11:18:19 -0700 |
| commit | 5bd38e18d5287f316cecf173199650072e83be2f (patch) | |
| tree | d441dc5b4d430263bb9c317a2d89b41e715a9a8d /io_uring/query.c | |
| parent | d741c6255524f0691aea53381219fadcd2b38408 (diff) | |
| parent | 4aaa9bc4d5921363490d95fe66c4db086a915799 (diff) | |
Merge branch 'zcrx-query-6.19' into for-6.19/io_uring
Merge zcrx SQ/CQ query changes from Pavel:
"Introduce zcrx and SQ/CQ layout queries. The former returns what zcrx
features are available. And both return the ring size information to
help with allocation size calculation for user provided rings like
IORING_SETUP_NO_MMAP and. IORING_MEM_REGION_TYPE_USER"
Link: https://lore.kernel.org/io-uring/cover.1763030298.git.asml.silence@gmail.com/
Signed-off-by: Jens Axboe <axboe@kernel.dk>
* zcrx-query-6.19:
io_uring/query: introduce rings info query
io_uring/query: introduce zcrx query
Diffstat (limited to 'io_uring/query.c')
| -rw-r--r-- | io_uring/query.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/io_uring/query.c b/io_uring/query.c index e1435cdc2665..e61b6221f87f 100644 --- a/io_uring/query.c +++ b/io_uring/query.c @@ -4,9 +4,12 @@ #include "query.h" #include "io_uring.h" +#include "zcrx.h" union io_query_data { struct io_uring_query_opcode opcodes; + struct io_uring_query_zcrx zcrx; + struct io_uring_query_scq scq; }; #define IO_MAX_QUERY_SIZE sizeof(union io_query_data) @@ -27,6 +30,29 @@ static ssize_t io_query_ops(union io_query_data *data) return sizeof(*e); } +static ssize_t io_query_zcrx(union io_query_data *data) +{ + struct io_uring_query_zcrx *e = &data->zcrx; + + e->register_flags = ZCRX_REG_IMPORT; + e->area_flags = IORING_ZCRX_AREA_DMABUF; + e->nr_ctrl_opcodes = __ZCRX_CTRL_LAST; + e->rq_hdr_size = sizeof(struct io_uring); + e->rq_hdr_alignment = L1_CACHE_BYTES; + e->__resv1 = 0; + e->__resv2 = 0; + return sizeof(*e); +} + +static ssize_t io_query_scq(union io_query_data *data) +{ + struct io_uring_query_scq *e = &data->scq; + + e->hdr_size = sizeof(struct io_rings); + e->hdr_alignment = SMP_CACHE_BYTES; + return sizeof(*e); +} + static int io_handle_query_entry(struct io_ring_ctx *ctx, union io_query_data *data, void __user *uhdr, u64 *next_entry) @@ -55,6 +81,12 @@ static int io_handle_query_entry(struct io_ring_ctx *ctx, case IO_URING_QUERY_OPCODES: ret = io_query_ops(data); break; + case IO_URING_QUERY_ZCRX: + ret = io_query_zcrx(data); + break; + case IO_URING_QUERY_SCQ: + ret = io_query_scq(data); + break; } if (ret >= 0) { |
