]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
io_uring: expose single mmap capability
authorJens Axboe <axboe@kernel.dk>
Fri, 6 Sep 2019 16:26:21 +0000 (10:26 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 6 Sep 2019 16:26:21 +0000 (10:26 -0600)
After commit 75b28affdd6a 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: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c
include/uapi/linux/io_uring.h

index 17dfe57c57f8c9a1e922ad70558ad057bee1abcb..be24596e90d757f04ac0fa31e7a39b30689ace1a 100644 (file)
@@ -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.overflow = offsetof(struct io_rings, cq_overflow);
        p->cq_off.cqes = offsetof(struct io_rings, cqes);
+
+       p->features = IORING_FEAT_SINGLE_MMAP;
        return ret;
 err:
        io_ring_ctx_wait_and_kill(ctx);
index 1e1652f25cc19d8c7b6f1090fc5633011ba6f624..96ee9d94b73e22428bccdb66452d10fdabb9aee5 100644 (file)
@@ -128,11 +128,17 @@ struct io_uring_params {
        __u32 flags;
        __u32 sq_thread_cpu;
        __u32 sq_thread_idle;
-       __u32 resv[5];
+       __u32 features;
+       __u32 resv[4];
        struct io_sqring_offsets sq_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
  */