summaryrefslogtreecommitdiff
path: root/io_uring/query.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2025-11-13 11:18:19 -0700
committerJens Axboe <axboe@kernel.dk>2025-11-13 11:18:19 -0700
commit5bd38e18d5287f316cecf173199650072e83be2f (patch)
treed441dc5b4d430263bb9c317a2d89b41e715a9a8d /io_uring/query.c
parentd741c6255524f0691aea53381219fadcd2b38408 (diff)
parent4aaa9bc4d5921363490d95fe66c4db086a915799 (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.c32
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) {