Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac90f249 authored by Jens Axboe's avatar Jens Axboe
Browse files

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
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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);
+7 −1
Original line number Original line Diff line number Diff line
@@ -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
 */
 */