io_uring: optimise ctx flags layout
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 16 Jan 2023 16:49:00 +0000 (16:49 +0000)
committerJens Axboe <axboe@kernel.dk>
Sun, 29 Jan 2023 22:17:41 +0000 (15:17 -0700)
There may be different cost for reeading just one byte or more, so it's
benificial to keep ctx flag bits that we access together in a single
byte. That affected code generation of __io_cq_unlock_post_flush() and
removed one memory load.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/bbe8ca4705704690319d65e45845f9fc9d35f420.1673887636.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/io_uring_types.h

index cc0cf0705b8f443ecd4c2c34f08cd5954864f200..0efe4d784358284cf31e165e37f06f70c06e49f2 100644 (file)
@@ -196,17 +196,17 @@ struct io_ring_ctx {
        /* const or read-mostly hot data */
        struct {
                unsigned int            flags;
-               unsigned int            compat: 1;
                unsigned int            drain_next: 1;
                unsigned int            restricted: 1;
                unsigned int            off_timeout_used: 1;
                unsigned int            drain_active: 1;
-               unsigned int            drain_disabled: 1;
                unsigned int            has_evfd: 1;
-               unsigned int            syscall_iopoll: 1;
                /* all CQEs should be posted only by the submitter task */
                unsigned int            task_complete: 1;
+               unsigned int            syscall_iopoll: 1;
                unsigned int            poll_activated: 1;
+               unsigned int            drain_disabled: 1;
+               unsigned int            compat: 1;
 
                enum task_work_notify_mode      notify_method;
                struct io_rings                 *rings;