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