summaryrefslogtreecommitdiffstats
path: root/io_uring/opdef.h
diff options
context:
space:
mode:
authorBreno Leitao <leitao@debian.org>2023-01-12 15:44:11 +0100
committerJens Axboe <axboe@kernel.dk>2023-01-29 23:17:41 +0100
commitf30bd4d03824fb437bf080c2b2f926cfee3f09d0 (patch)
tree15a2881e392b0fec4f7a217aff51864b70e42ddb /io_uring/opdef.h
parentio_uring: Rename struct io_op_def (diff)
downloadlinux-f30bd4d03824fb437bf080c2b2f926cfee3f09d0.tar.xz
linux-f30bd4d03824fb437bf080c2b2f926cfee3f09d0.zip
io_uring: Split io_issue_def struct
This patch removes some "cold" fields from `struct io_issue_def`. The plan is to keep only highly used fields into `struct io_issue_def`, so, it may be hot in the cache. The hot fields are basically all the bitfields and the callback functions for .issue and .prep. The other less frequently used fields are now located in a secondary and cold struct, called `io_cold_def`. This is the size for the structs: Before: io_issue_def = 56 bytes After: io_issue_def = 24 bytes; io_cold_def = 40 bytes Signed-off-by: Breno Leitao <leitao@debian.org> Reviewed-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/20230112144411.2624698-2-leitao@debian.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/opdef.h')
-rw-r--r--io_uring/opdef.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/io_uring/opdef.h b/io_uring/opdef.h
index d718e2ab1ff7..c22c8696e749 100644
--- a/io_uring/opdef.h
+++ b/io_uring/opdef.h
@@ -29,19 +29,24 @@ struct io_issue_def {
unsigned iopoll_queue : 1;
/* opcode specific path will handle ->async_data allocation if needed */
unsigned manual_alloc : 1;
+
+ int (*issue)(struct io_kiocb *, unsigned int);
+ int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
+};
+
+struct io_cold_def {
/* size of async data needed, if any */
unsigned short async_size;
const char *name;
- int (*prep)(struct io_kiocb *, const struct io_uring_sqe *);
- int (*issue)(struct io_kiocb *, unsigned int);
int (*prep_async)(struct io_kiocb *);
void (*cleanup)(struct io_kiocb *);
void (*fail)(struct io_kiocb *);
};
extern const struct io_issue_def io_issue_defs[];
+extern const struct io_cold_def io_cold_defs[];
void io_uring_optable_init(void);
#endif