Commit ac90f249 authored by Jens Axboe's avatar Jens Axboe

io_uring: expose single mmap capability

After commit 75b28aff we can get by with just a single mmap to
map both the sq and cq ring. However, userspace doesn't know that.

Add a features variable to io_uring_params, and notify userspace
that the kernel has this ability. This can then be used in liburing
(or in applications directly) to avoid the second mmap.
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 75b28aff
...@@ -3391,6 +3391,8 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p) ...@@ -3391,6 +3391,8 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p)
p->cq_off.ring_entries = offsetof(struct io_rings, cq_ring_entries); p->cq_off.ring_entries = offsetof(struct io_rings, cq_ring_entries);
p->cq_off.overflow = offsetof(struct io_rings, cq_overflow); p->cq_off.overflow = offsetof(struct io_rings, cq_overflow);
p->cq_off.cqes = offsetof(struct io_rings, cqes); p->cq_off.cqes = offsetof(struct io_rings, cqes);
p->features = IORING_FEAT_SINGLE_MMAP;
return ret; return ret;
err: err:
io_ring_ctx_wait_and_kill(ctx); io_ring_ctx_wait_and_kill(ctx);
......
...@@ -128,11 +128,17 @@ struct io_uring_params { ...@@ -128,11 +128,17 @@ struct io_uring_params {
__u32 flags; __u32 flags;
__u32 sq_thread_cpu; __u32 sq_thread_cpu;
__u32 sq_thread_idle; __u32 sq_thread_idle;
__u32 resv[5]; __u32 features;
__u32 resv[4];
struct io_sqring_offsets sq_off; struct io_sqring_offsets sq_off;
struct io_cqring_offsets cq_off; struct io_cqring_offsets cq_off;
}; };
/*
* io_uring_params->features flags
*/
#define IORING_FEAT_SINGLE_MMAP (1U << 0)
/* /*
* io_uring_register(2) opcodes and arguments * io_uring_register(2) opcodes and arguments
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment