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

io_uring/nop: add IORING_NOP_TW completion flag



To test and profile the overhead of io_uring task_work and the various
types of it, add IORING_NOP_TW which tells nop to signal completions
through task_work rather than complete them inline.

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ecf47d45
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -449,6 +449,7 @@ enum io_uring_msg_ring_flags {
#define IORING_NOP_FILE			(1U << 1)
#define IORING_NOP_FIXED_FILE		(1U << 2)
#define IORING_NOP_FIXED_BUFFER		(1U << 3)
#define IORING_NOP_TW			(1U << 4)

/*
 * IO completion data structure (Completion Queue Entry)
+7 −1
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ struct io_nop {
};

#define NOP_FLAGS	(IORING_NOP_INJECT_RESULT | IORING_NOP_FIXED_FILE | \
			 IORING_NOP_FIXED_BUFFER | IORING_NOP_FILE)
			 IORING_NOP_FIXED_BUFFER | IORING_NOP_FILE | \
			 IORING_NOP_TW)

int io_nop_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
{
@@ -68,5 +69,10 @@ int io_nop(struct io_kiocb *req, unsigned int issue_flags)
	if (ret < 0)
		req_set_fail(req);
	io_req_set_res(req, nop->result, 0);
	if (nop->flags & IORING_NOP_TW) {
		req->io_task_work.func = io_req_task_complete;
		io_req_task_work_add(req);
		return IOU_ISSUE_SKIP_COMPLETE;
	}
	return IOU_COMPLETE;
}