Commit | Line | Data |
---|---|---|
1f050a46 SH |
1 | /* |
2 | * AioContext POSIX event loop implementation internal APIs | |
3 | * | |
4 | * Copyright IBM, Corp. 2008 | |
5 | * Copyright Red Hat, Inc. 2020 | |
6 | * | |
7 | * Authors: | |
8 | * Anthony Liguori <aliguori@us.ibm.com> | |
9 | * | |
10 | * This work is licensed under the terms of the GNU GPL, version 2. See | |
11 | * the COPYING file in the top-level directory. | |
12 | * | |
13 | * Contributions after 2012-01-13 are licensed under the terms of the | |
14 | * GNU GPL, version 2 or (at your option) any later version. | |
15 | */ | |
16 | ||
17 | #ifndef AIO_POSIX_H | |
18 | #define AIO_POSIX_H | |
19 | ||
20 | #include "block/aio.h" | |
21 | ||
22 | struct AioHandler { | |
23 | GPollFD pfd; | |
24 | IOHandler *io_read; | |
25 | IOHandler *io_write; | |
26 | AioPollFn *io_poll; | |
826cc324 | 27 | IOHandler *io_poll_ready; |
1f050a46 SH |
28 | IOHandler *io_poll_begin; |
29 | IOHandler *io_poll_end; | |
30 | void *opaque; | |
1f050a46 SH |
31 | QLIST_ENTRY(AioHandler) node; |
32 | QLIST_ENTRY(AioHandler) node_ready; /* only used during aio_poll() */ | |
33 | QLIST_ENTRY(AioHandler) node_deleted; | |
d37d0e36 | 34 | QLIST_ENTRY(AioHandler) node_poll; |
73fd282e SH |
35 | #ifdef CONFIG_LINUX_IO_URING |
36 | QSLIST_ENTRY(AioHandler) node_submitted; | |
37 | unsigned flags; /* see fdmon-io_uring.c */ | |
38 | #endif | |
d37d0e36 | 39 | int64_t poll_idle_timeout; /* when to stop userspace polling */ |
fc879646 | 40 | bool poll_ready; /* has polling detected an event? */ |
73fd282e | 41 | bool is_external; |
1f050a46 SH |
42 | }; |
43 | ||
44 | /* Add a handler to a ready list */ | |
45 | void aio_add_ready_handler(AioHandlerList *ready_list, AioHandler *node, | |
46 | int revents); | |
47 | ||
48 | extern const FDMonOps fdmon_poll_ops; | |
49 | ||
50 | #ifdef CONFIG_EPOLL_CREATE1 | |
51 | bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd); | |
52 | void fdmon_epoll_setup(AioContext *ctx); | |
53 | void fdmon_epoll_disable(AioContext *ctx); | |
54 | #else | |
55 | static inline bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd) | |
56 | { | |
57 | return false; | |
58 | } | |
59 | ||
60 | static inline void fdmon_epoll_setup(AioContext *ctx) | |
61 | { | |
62 | } | |
63 | ||
64 | static inline void fdmon_epoll_disable(AioContext *ctx) | |
65 | { | |
66 | } | |
67 | #endif /* !CONFIG_EPOLL_CREATE1 */ | |
68 | ||
73fd282e SH |
69 | #ifdef CONFIG_LINUX_IO_URING |
70 | bool fdmon_io_uring_setup(AioContext *ctx); | |
71 | void fdmon_io_uring_destroy(AioContext *ctx); | |
72 | #else | |
73 | static inline bool fdmon_io_uring_setup(AioContext *ctx) | |
74 | { | |
75 | return false; | |
76 | } | |
77 | ||
78 | static inline void fdmon_io_uring_destroy(AioContext *ctx) | |
79 | { | |
80 | } | |
81 | #endif /* !CONFIG_LINUX_IO_URING */ | |
82 | ||
1f050a46 | 83 | #endif /* AIO_POSIX_H */ |