qemu/util/aio-posix.h
<<
>>
Prefs
   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
  22struct AioHandler {
  23    GPollFD pfd;
  24    IOHandler *io_read;
  25    IOHandler *io_write;
  26    AioPollFn *io_poll;
  27    IOHandler *io_poll_ready;
  28    IOHandler *io_poll_begin;
  29    IOHandler *io_poll_end;
  30    void *opaque;
  31    QLIST_ENTRY(AioHandler) node;
  32    QLIST_ENTRY(AioHandler) node_ready; /* only used during aio_poll() */
  33    QLIST_ENTRY(AioHandler) node_deleted;
  34    QLIST_ENTRY(AioHandler) node_poll;
  35#ifdef CONFIG_LINUX_IO_URING
  36    QSLIST_ENTRY(AioHandler) node_submitted;
  37    unsigned flags; /* see fdmon-io_uring.c */
  38#endif
  39    int64_t poll_idle_timeout; /* when to stop userspace polling */
  40    bool poll_ready; /* has polling detected an event? */
  41    bool is_external;
  42};
  43
  44/* Add a handler to a ready list */
  45void aio_add_ready_handler(AioHandlerList *ready_list, AioHandler *node,
  46                           int revents);
  47
  48extern const FDMonOps fdmon_poll_ops;
  49
  50#ifdef CONFIG_EPOLL_CREATE1
  51bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd);
  52void fdmon_epoll_setup(AioContext *ctx);
  53void fdmon_epoll_disable(AioContext *ctx);
  54#else
  55static inline bool fdmon_epoll_try_upgrade(AioContext *ctx, unsigned npfd)
  56{
  57    return false;
  58}
  59
  60static inline void fdmon_epoll_setup(AioContext *ctx)
  61{
  62}
  63
  64static inline void fdmon_epoll_disable(AioContext *ctx)
  65{
  66}
  67#endif /* !CONFIG_EPOLL_CREATE1 */
  68
  69#ifdef CONFIG_LINUX_IO_URING
  70bool fdmon_io_uring_setup(AioContext *ctx);
  71void fdmon_io_uring_destroy(AioContext *ctx);
  72#else
  73static inline bool fdmon_io_uring_setup(AioContext *ctx)
  74{
  75    return false;
  76}
  77
  78static inline void fdmon_io_uring_destroy(AioContext *ctx)
  79{
  80}
  81#endif /* !CONFIG_LINUX_IO_URING */
  82
  83#endif /* AIO_POSIX_H */
  84