cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

aio.h (25421B)


      1/*
      2 * QEMU aio implementation
      3 *
      4 * Copyright IBM, Corp. 2008
      5 *
      6 * Authors:
      7 *  Anthony Liguori   <aliguori@us.ibm.com>
      8 *
      9 * This work is licensed under the terms of the GNU GPL, version 2.  See
     10 * the COPYING file in the top-level directory.
     11 *
     12 */
     13
     14#ifndef QEMU_AIO_H
     15#define QEMU_AIO_H
     16
     17#ifdef CONFIG_LINUX_IO_URING
     18#include <liburing.h>
     19#endif
     20#include "qemu/coroutine.h"
     21#include "qemu/queue.h"
     22#include "qemu/event_notifier.h"
     23#include "qemu/thread.h"
     24#include "qemu/timer.h"
     25
     26typedef struct BlockAIOCB BlockAIOCB;
     27typedef void BlockCompletionFunc(void *opaque, int ret);
     28
     29typedef struct AIOCBInfo {
     30    void (*cancel_async)(BlockAIOCB *acb);
     31    AioContext *(*get_aio_context)(BlockAIOCB *acb);
     32    size_t aiocb_size;
     33} AIOCBInfo;
     34
     35struct BlockAIOCB {
     36    const AIOCBInfo *aiocb_info;
     37    BlockDriverState *bs;
     38    BlockCompletionFunc *cb;
     39    void *opaque;
     40    int refcnt;
     41};
     42
     43void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs,
     44                   BlockCompletionFunc *cb, void *opaque);
     45void qemu_aio_unref(void *p);
     46void qemu_aio_ref(void *p);
     47
     48typedef struct AioHandler AioHandler;
     49typedef QLIST_HEAD(, AioHandler) AioHandlerList;
     50typedef void QEMUBHFunc(void *opaque);
     51typedef bool AioPollFn(void *opaque);
     52typedef void IOHandler(void *opaque);
     53
     54struct Coroutine;
     55struct ThreadPool;
     56struct LinuxAioState;
     57struct LuringState;
     58
     59/* Is polling disabled? */
     60bool aio_poll_disabled(AioContext *ctx);
     61
     62/* Callbacks for file descriptor monitoring implementations */
     63typedef struct {
     64    /*
     65     * update:
     66     * @ctx: the AioContext
     67     * @old_node: the existing handler or NULL if this file descriptor is being
     68     *            monitored for the first time
     69     * @new_node: the new handler or NULL if this file descriptor is being
     70     *            removed
     71     *
     72     * Add/remove/modify a monitored file descriptor.
     73     *
     74     * Called with ctx->list_lock acquired.
     75     */
     76    void (*update)(AioContext *ctx, AioHandler *old_node, AioHandler *new_node);
     77
     78    /*
     79     * wait:
     80     * @ctx: the AioContext
     81     * @ready_list: list for handlers that become ready
     82     * @timeout: maximum duration to wait, in nanoseconds
     83     *
     84     * Wait for file descriptors to become ready and place them on ready_list.
     85     *
     86     * Called with ctx->list_lock incremented but not locked.
     87     *
     88     * Returns: number of ready file descriptors.
     89     */
     90    int (*wait)(AioContext *ctx, AioHandlerList *ready_list, int64_t timeout);
     91
     92    /*
     93     * need_wait:
     94     * @ctx: the AioContext
     95     *
     96     * Tell aio_poll() when to stop userspace polling early because ->wait()
     97     * has fds ready.
     98     *
     99     * File descriptor monitoring implementations that cannot poll fd readiness
    100     * from userspace should use aio_poll_disabled() here.  This ensures that
    101     * file descriptors are not starved by handlers that frequently make
    102     * progress via userspace polling.
    103     *
    104     * Returns: true if ->wait() should be called, false otherwise.
    105     */
    106    bool (*need_wait)(AioContext *ctx);
    107} FDMonOps;
    108
    109/*
    110 * Each aio_bh_poll() call carves off a slice of the BH list, so that newly
    111 * scheduled BHs are not processed until the next aio_bh_poll() call.  All
    112 * active aio_bh_poll() calls chain their slices together in a list, so that
    113 * nested aio_bh_poll() calls process all scheduled bottom halves.
    114 */
    115typedef QSLIST_HEAD(, QEMUBH) BHList;
    116typedef struct BHListSlice BHListSlice;
    117struct BHListSlice {
    118    BHList bh_list;
    119    QSIMPLEQ_ENTRY(BHListSlice) next;
    120};
    121
    122typedef QSLIST_HEAD(, AioHandler) AioHandlerSList;
    123
    124struct AioContext {
    125    GSource source;
    126
    127    /* Used by AioContext users to protect from multi-threaded access.  */
    128    QemuRecMutex lock;
    129
    130    /* The list of registered AIO handlers.  Protected by ctx->list_lock. */
    131    AioHandlerList aio_handlers;
    132
    133    /* The list of AIO handlers to be deleted.  Protected by ctx->list_lock. */
    134    AioHandlerList deleted_aio_handlers;
    135
    136    /* Used to avoid unnecessary event_notifier_set calls in aio_notify;
    137     * only written from the AioContext home thread, or under the BQL in
    138     * the case of the main AioContext.  However, it is read from any
    139     * thread so it is still accessed with atomic primitives.
    140     *
    141     * If this field is 0, everything (file descriptors, bottom halves,
    142     * timers) will be re-evaluated before the next blocking poll() or
    143     * io_uring wait; therefore, the event_notifier_set call can be
    144     * skipped.  If it is non-zero, you may need to wake up a concurrent
    145     * aio_poll or the glib main event loop, making event_notifier_set
    146     * necessary.
    147     *
    148     * Bit 0 is reserved for GSource usage of the AioContext, and is 1
    149     * between a call to aio_ctx_prepare and the next call to aio_ctx_check.
    150     * Bits 1-31 simply count the number of active calls to aio_poll
    151     * that are in the prepare or poll phase.
    152     *
    153     * The GSource and aio_poll must use a different mechanism because
    154     * there is no certainty that a call to GSource's prepare callback
    155     * (via g_main_context_prepare) is indeed followed by check and
    156     * dispatch.  It's not clear whether this would be a bug, but let's
    157     * play safe and allow it---it will just cause extra calls to
    158     * event_notifier_set until the next call to dispatch.
    159     *
    160     * Instead, the aio_poll calls include both the prepare and the
    161     * dispatch phase, hence a simple counter is enough for them.
    162     */
    163    uint32_t notify_me;
    164
    165    /* A lock to protect between QEMUBH and AioHandler adders and deleter,
    166     * and to ensure that no callbacks are removed while we're walking and
    167     * dispatching them.
    168     */
    169    QemuLockCnt list_lock;
    170
    171    /* Bottom Halves pending aio_bh_poll() processing */
    172    BHList bh_list;
    173
    174    /* Chained BH list slices for each nested aio_bh_poll() call */
    175    QSIMPLEQ_HEAD(, BHListSlice) bh_slice_list;
    176
    177    /* Used by aio_notify.
    178     *
    179     * "notified" is used to avoid expensive event_notifier_test_and_clear
    180     * calls.  When it is clear, the EventNotifier is clear, or one thread
    181     * is going to clear "notified" before processing more events.  False
    182     * positives are possible, i.e. "notified" could be set even though the
    183     * EventNotifier is clear.
    184     *
    185     * Note that event_notifier_set *cannot* be optimized the same way.  For
    186     * more information on the problem that would result, see "#ifdef BUG2"
    187     * in the docs/aio_notify_accept.promela formal model.
    188     */
    189    bool notified;
    190    EventNotifier notifier;
    191
    192    QSLIST_HEAD(, Coroutine) scheduled_coroutines;
    193    QEMUBH *co_schedule_bh;
    194
    195    /* Thread pool for performing work and receiving completion callbacks.
    196     * Has its own locking.
    197     */
    198    struct ThreadPool *thread_pool;
    199
    200#ifdef CONFIG_LINUX_AIO
    201    /*
    202     * State for native Linux AIO.  Uses aio_context_acquire/release for
    203     * locking.
    204     */
    205    struct LinuxAioState *linux_aio;
    206#endif
    207#ifdef CONFIG_LINUX_IO_URING
    208    /*
    209     * State for Linux io_uring.  Uses aio_context_acquire/release for
    210     * locking.
    211     */
    212    struct LuringState *linux_io_uring;
    213
    214    /* State for file descriptor monitoring using Linux io_uring */
    215    struct io_uring fdmon_io_uring;
    216    AioHandlerSList submit_list;
    217#endif
    218
    219    /* TimerLists for calling timers - one per clock type.  Has its own
    220     * locking.
    221     */
    222    QEMUTimerListGroup tlg;
    223
    224    int external_disable_cnt;
    225
    226    /* Number of AioHandlers without .io_poll() */
    227    int poll_disable_cnt;
    228
    229    /* Polling mode parameters */
    230    int64_t poll_ns;        /* current polling time in nanoseconds */
    231    int64_t poll_max_ns;    /* maximum polling time in nanoseconds */
    232    int64_t poll_grow;      /* polling time growth factor */
    233    int64_t poll_shrink;    /* polling time shrink factor */
    234
    235    /* AIO engine parameters */
    236    int64_t aio_max_batch;  /* maximum number of requests in a batch */
    237
    238    /*
    239     * List of handlers participating in userspace polling.  Protected by
    240     * ctx->list_lock.  Iterated and modified mostly by the event loop thread
    241     * from aio_poll() with ctx->list_lock incremented.  aio_set_fd_handler()
    242     * only touches the list to delete nodes if ctx->list_lock's count is zero.
    243     */
    244    AioHandlerList poll_aio_handlers;
    245
    246    /* Are we in polling mode or monitoring file descriptors? */
    247    bool poll_started;
    248
    249    /* epoll(7) state used when built with CONFIG_EPOLL */
    250    int epollfd;
    251
    252    const FDMonOps *fdmon_ops;
    253};
    254
    255/**
    256 * aio_context_new: Allocate a new AioContext.
    257 *
    258 * AioContext provide a mini event-loop that can be waited on synchronously.
    259 * They also provide bottom halves, a service to execute a piece of code
    260 * as soon as possible.
    261 */
    262AioContext *aio_context_new(Error **errp);
    263
    264/**
    265 * aio_context_ref:
    266 * @ctx: The AioContext to operate on.
    267 *
    268 * Add a reference to an AioContext.
    269 */
    270void aio_context_ref(AioContext *ctx);
    271
    272/**
    273 * aio_context_unref:
    274 * @ctx: The AioContext to operate on.
    275 *
    276 * Drop a reference to an AioContext.
    277 */
    278void aio_context_unref(AioContext *ctx);
    279
    280/* Take ownership of the AioContext.  If the AioContext will be shared between
    281 * threads, and a thread does not want to be interrupted, it will have to
    282 * take ownership around calls to aio_poll().  Otherwise, aio_poll()
    283 * automatically takes care of calling aio_context_acquire and
    284 * aio_context_release.
    285 *
    286 * Note that this is separate from bdrv_drained_begin/bdrv_drained_end.  A
    287 * thread still has to call those to avoid being interrupted by the guest.
    288 *
    289 * Bottom halves, timers and callbacks can be created or removed without
    290 * acquiring the AioContext.
    291 */
    292void aio_context_acquire(AioContext *ctx);
    293
    294/* Relinquish ownership of the AioContext. */
    295void aio_context_release(AioContext *ctx);
    296
    297/**
    298 * aio_bh_schedule_oneshot_full: Allocate a new bottom half structure that will
    299 * run only once and as soon as possible.
    300 *
    301 * @name: A human-readable identifier for debugging purposes.
    302 */
    303void aio_bh_schedule_oneshot_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
    304                                  const char *name);
    305
    306/**
    307 * aio_bh_schedule_oneshot: Allocate a new bottom half structure that will run
    308 * only once and as soon as possible.
    309 *
    310 * A convenience wrapper for aio_bh_schedule_oneshot_full() that uses cb as the
    311 * name string.
    312 */
    313#define aio_bh_schedule_oneshot(ctx, cb, opaque) \
    314    aio_bh_schedule_oneshot_full((ctx), (cb), (opaque), (stringify(cb)))
    315
    316/**
    317 * aio_bh_new_full: Allocate a new bottom half structure.
    318 *
    319 * Bottom halves are lightweight callbacks whose invocation is guaranteed
    320 * to be wait-free, thread-safe and signal-safe.  The #QEMUBH structure
    321 * is opaque and must be allocated prior to its use.
    322 *
    323 * @name: A human-readable identifier for debugging purposes.
    324 */
    325QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque,
    326                        const char *name);
    327
    328/**
    329 * aio_bh_new: Allocate a new bottom half structure
    330 *
    331 * A convenience wrapper for aio_bh_new_full() that uses the cb as the name
    332 * string.
    333 */
    334#define aio_bh_new(ctx, cb, opaque) \
    335    aio_bh_new_full((ctx), (cb), (opaque), (stringify(cb)))
    336
    337/**
    338 * aio_notify: Force processing of pending events.
    339 *
    340 * Similar to signaling a condition variable, aio_notify forces
    341 * aio_poll to exit, so that the next call will re-examine pending events.
    342 * The caller of aio_notify will usually call aio_poll again very soon,
    343 * or go through another iteration of the GLib main loop.  Hence, aio_notify
    344 * also has the side effect of recalculating the sets of file descriptors
    345 * that the main loop waits for.
    346 *
    347 * Calling aio_notify is rarely necessary, because for example scheduling
    348 * a bottom half calls it already.
    349 */
    350void aio_notify(AioContext *ctx);
    351
    352/**
    353 * aio_notify_accept: Acknowledge receiving an aio_notify.
    354 *
    355 * aio_notify() uses an EventNotifier in order to wake up a sleeping
    356 * aio_poll() or g_main_context_iteration().  Calls to aio_notify() are
    357 * usually rare, but the AioContext has to clear the EventNotifier on
    358 * every aio_poll() or g_main_context_iteration() in order to avoid
    359 * busy waiting.  This event_notifier_test_and_clear() cannot be done
    360 * using the usual aio_context_set_event_notifier(), because it must
    361 * be done before processing all events (file descriptors, bottom halves,
    362 * timers).
    363 *
    364 * aio_notify_accept() is an optimized event_notifier_test_and_clear()
    365 * that is specific to an AioContext's notifier; it is used internally
    366 * to clear the EventNotifier only if aio_notify() had been called.
    367 */
    368void aio_notify_accept(AioContext *ctx);
    369
    370/**
    371 * aio_bh_call: Executes callback function of the specified BH.
    372 */
    373void aio_bh_call(QEMUBH *bh);
    374
    375/**
    376 * aio_bh_poll: Poll bottom halves for an AioContext.
    377 *
    378 * These are internal functions used by the QEMU main loop.
    379 * And notice that multiple occurrences of aio_bh_poll cannot
    380 * be called concurrently
    381 */
    382int aio_bh_poll(AioContext *ctx);
    383
    384/**
    385 * qemu_bh_schedule: Schedule a bottom half.
    386 *
    387 * Scheduling a bottom half interrupts the main loop and causes the
    388 * execution of the callback that was passed to qemu_bh_new.
    389 *
    390 * Bottom halves that are scheduled from a bottom half handler are instantly
    391 * invoked.  This can create an infinite loop if a bottom half handler
    392 * schedules itself.
    393 *
    394 * @bh: The bottom half to be scheduled.
    395 */
    396void qemu_bh_schedule(QEMUBH *bh);
    397
    398/**
    399 * qemu_bh_cancel: Cancel execution of a bottom half.
    400 *
    401 * Canceling execution of a bottom half undoes the effect of calls to
    402 * qemu_bh_schedule without freeing its resources yet.  While cancellation
    403 * itself is also wait-free and thread-safe, it can of course race with the
    404 * loop that executes bottom halves unless you are holding the iothread
    405 * mutex.  This makes it mostly useless if you are not holding the mutex.
    406 *
    407 * @bh: The bottom half to be canceled.
    408 */
    409void qemu_bh_cancel(QEMUBH *bh);
    410
    411/**
    412 *qemu_bh_delete: Cancel execution of a bottom half and free its resources.
    413 *
    414 * Deleting a bottom half frees the memory that was allocated for it by
    415 * qemu_bh_new.  It also implies canceling the bottom half if it was
    416 * scheduled.
    417 * This func is async. The bottom half will do the delete action at the finial
    418 * end.
    419 *
    420 * @bh: The bottom half to be deleted.
    421 */
    422void qemu_bh_delete(QEMUBH *bh);
    423
    424/* Return whether there are any pending callbacks from the GSource
    425 * attached to the AioContext, before g_poll is invoked.
    426 *
    427 * This is used internally in the implementation of the GSource.
    428 */
    429bool aio_prepare(AioContext *ctx);
    430
    431/* Return whether there are any pending callbacks from the GSource
    432 * attached to the AioContext, after g_poll is invoked.
    433 *
    434 * This is used internally in the implementation of the GSource.
    435 */
    436bool aio_pending(AioContext *ctx);
    437
    438/* Dispatch any pending callbacks from the GSource attached to the AioContext.
    439 *
    440 * This is used internally in the implementation of the GSource.
    441 */
    442void aio_dispatch(AioContext *ctx);
    443
    444/* Progress in completing AIO work to occur.  This can issue new pending
    445 * aio as a result of executing I/O completion or bh callbacks.
    446 *
    447 * Return whether any progress was made by executing AIO or bottom half
    448 * handlers.  If @blocking == true, this should always be true except
    449 * if someone called aio_notify.
    450 *
    451 * If there are no pending bottom halves, but there are pending AIO
    452 * operations, it may not be possible to make any progress without
    453 * blocking.  If @blocking is true, this function will wait until one
    454 * or more AIO events have completed, to ensure something has moved
    455 * before returning.
    456 */
    457bool aio_poll(AioContext *ctx, bool blocking);
    458
    459/* Register a file descriptor and associated callbacks.  Behaves very similarly
    460 * to qemu_set_fd_handler.  Unlike qemu_set_fd_handler, these callbacks will
    461 * be invoked when using aio_poll().
    462 *
    463 * Code that invokes AIO completion functions should rely on this function
    464 * instead of qemu_set_fd_handler[2].
    465 */
    466void aio_set_fd_handler(AioContext *ctx,
    467                        int fd,
    468                        bool is_external,
    469                        IOHandler *io_read,
    470                        IOHandler *io_write,
    471                        AioPollFn *io_poll,
    472                        void *opaque);
    473
    474/* Set polling begin/end callbacks for a file descriptor that has already been
    475 * registered with aio_set_fd_handler.  Do nothing if the file descriptor is
    476 * not registered.
    477 */
    478void aio_set_fd_poll(AioContext *ctx, int fd,
    479                     IOHandler *io_poll_begin,
    480                     IOHandler *io_poll_end);
    481
    482/* Register an event notifier and associated callbacks.  Behaves very similarly
    483 * to event_notifier_set_handler.  Unlike event_notifier_set_handler, these callbacks
    484 * will be invoked when using aio_poll().
    485 *
    486 * Code that invokes AIO completion functions should rely on this function
    487 * instead of event_notifier_set_handler.
    488 */
    489void aio_set_event_notifier(AioContext *ctx,
    490                            EventNotifier *notifier,
    491                            bool is_external,
    492                            EventNotifierHandler *io_read,
    493                            AioPollFn *io_poll);
    494
    495/* Set polling begin/end callbacks for an event notifier that has already been
    496 * registered with aio_set_event_notifier.  Do nothing if the event notifier is
    497 * not registered.
    498 */
    499void aio_set_event_notifier_poll(AioContext *ctx,
    500                                 EventNotifier *notifier,
    501                                 EventNotifierHandler *io_poll_begin,
    502                                 EventNotifierHandler *io_poll_end);
    503
    504/* Return a GSource that lets the main loop poll the file descriptors attached
    505 * to this AioContext.
    506 */
    507GSource *aio_get_g_source(AioContext *ctx);
    508
    509/* Return the ThreadPool bound to this AioContext */
    510struct ThreadPool *aio_get_thread_pool(AioContext *ctx);
    511
    512/* Setup the LinuxAioState bound to this AioContext */
    513struct LinuxAioState *aio_setup_linux_aio(AioContext *ctx, Error **errp);
    514
    515/* Return the LinuxAioState bound to this AioContext */
    516struct LinuxAioState *aio_get_linux_aio(AioContext *ctx);
    517
    518/* Setup the LuringState bound to this AioContext */
    519struct LuringState *aio_setup_linux_io_uring(AioContext *ctx, Error **errp);
    520
    521/* Return the LuringState bound to this AioContext */
    522struct LuringState *aio_get_linux_io_uring(AioContext *ctx);
    523/**
    524 * aio_timer_new_with_attrs:
    525 * @ctx: the aio context
    526 * @type: the clock type
    527 * @scale: the scale
    528 * @attributes: 0, or one to multiple OR'ed QEMU_TIMER_ATTR_<id> values
    529 *              to assign
    530 * @cb: the callback to call on timer expiry
    531 * @opaque: the opaque pointer to pass to the callback
    532 *
    533 * Allocate a new timer (with attributes) attached to the context @ctx.
    534 * The function is responsible for memory allocation.
    535 *
    536 * The preferred interface is aio_timer_init or aio_timer_init_with_attrs.
    537 * Use that unless you really need dynamic memory allocation.
    538 *
    539 * Returns: a pointer to the new timer
    540 */
    541static inline QEMUTimer *aio_timer_new_with_attrs(AioContext *ctx,
    542                                                  QEMUClockType type,
    543                                                  int scale, int attributes,
    544                                                  QEMUTimerCB *cb, void *opaque)
    545{
    546    return timer_new_full(&ctx->tlg, type, scale, attributes, cb, opaque);
    547}
    548
    549/**
    550 * aio_timer_new:
    551 * @ctx: the aio context
    552 * @type: the clock type
    553 * @scale: the scale
    554 * @cb: the callback to call on timer expiry
    555 * @opaque: the opaque pointer to pass to the callback
    556 *
    557 * Allocate a new timer attached to the context @ctx.
    558 * See aio_timer_new_with_attrs for details.
    559 *
    560 * Returns: a pointer to the new timer
    561 */
    562static inline QEMUTimer *aio_timer_new(AioContext *ctx, QEMUClockType type,
    563                                       int scale,
    564                                       QEMUTimerCB *cb, void *opaque)
    565{
    566    return timer_new_full(&ctx->tlg, type, scale, 0, cb, opaque);
    567}
    568
    569/**
    570 * aio_timer_init_with_attrs:
    571 * @ctx: the aio context
    572 * @ts: the timer
    573 * @type: the clock type
    574 * @scale: the scale
    575 * @attributes: 0, or one to multiple OR'ed QEMU_TIMER_ATTR_<id> values
    576 *              to assign
    577 * @cb: the callback to call on timer expiry
    578 * @opaque: the opaque pointer to pass to the callback
    579 *
    580 * Initialise a new timer (with attributes) attached to the context @ctx.
    581 * The caller is responsible for memory allocation.
    582 */
    583static inline void aio_timer_init_with_attrs(AioContext *ctx,
    584                                             QEMUTimer *ts, QEMUClockType type,
    585                                             int scale, int attributes,
    586                                             QEMUTimerCB *cb, void *opaque)
    587{
    588    timer_init_full(ts, &ctx->tlg, type, scale, attributes, cb, opaque);
    589}
    590
    591/**
    592 * aio_timer_init:
    593 * @ctx: the aio context
    594 * @ts: the timer
    595 * @type: the clock type
    596 * @scale: the scale
    597 * @cb: the callback to call on timer expiry
    598 * @opaque: the opaque pointer to pass to the callback
    599 *
    600 * Initialise a new timer attached to the context @ctx.
    601 * See aio_timer_init_with_attrs for details.
    602 */
    603static inline void aio_timer_init(AioContext *ctx,
    604                                  QEMUTimer *ts, QEMUClockType type,
    605                                  int scale,
    606                                  QEMUTimerCB *cb, void *opaque)
    607{
    608    timer_init_full(ts, &ctx->tlg, type, scale, 0, cb, opaque);
    609}
    610
    611/**
    612 * aio_compute_timeout:
    613 * @ctx: the aio context
    614 *
    615 * Compute the timeout that a blocking aio_poll should use.
    616 */
    617int64_t aio_compute_timeout(AioContext *ctx);
    618
    619/**
    620 * aio_disable_external:
    621 * @ctx: the aio context
    622 *
    623 * Disable the further processing of external clients.
    624 */
    625static inline void aio_disable_external(AioContext *ctx)
    626{
    627    qatomic_inc(&ctx->external_disable_cnt);
    628}
    629
    630/**
    631 * aio_enable_external:
    632 * @ctx: the aio context
    633 *
    634 * Enable the processing of external clients.
    635 */
    636static inline void aio_enable_external(AioContext *ctx)
    637{
    638    int old;
    639
    640    old = qatomic_fetch_dec(&ctx->external_disable_cnt);
    641    assert(old > 0);
    642    if (old == 1) {
    643        /* Kick event loop so it re-arms file descriptors */
    644        aio_notify(ctx);
    645    }
    646}
    647
    648/**
    649 * aio_external_disabled:
    650 * @ctx: the aio context
    651 *
    652 * Return true if the external clients are disabled.
    653 */
    654static inline bool aio_external_disabled(AioContext *ctx)
    655{
    656    return qatomic_read(&ctx->external_disable_cnt);
    657}
    658
    659/**
    660 * aio_node_check:
    661 * @ctx: the aio context
    662 * @is_external: Whether or not the checked node is an external event source.
    663 *
    664 * Check if the node's is_external flag is okay to be polled by the ctx at this
    665 * moment. True means green light.
    666 */
    667static inline bool aio_node_check(AioContext *ctx, bool is_external)
    668{
    669    return !is_external || !qatomic_read(&ctx->external_disable_cnt);
    670}
    671
    672/**
    673 * aio_co_schedule:
    674 * @ctx: the aio context
    675 * @co: the coroutine
    676 *
    677 * Start a coroutine on a remote AioContext.
    678 *
    679 * The coroutine must not be entered by anyone else while aio_co_schedule()
    680 * is active.  In addition the coroutine must have yielded unless ctx
    681 * is the context in which the coroutine is running (i.e. the value of
    682 * qemu_get_current_aio_context() from the coroutine itself).
    683 */
    684void aio_co_schedule(AioContext *ctx, struct Coroutine *co);
    685
    686/**
    687 * aio_co_reschedule_self:
    688 * @new_ctx: the new context
    689 *
    690 * Move the currently running coroutine to new_ctx. If the coroutine is already
    691 * running in new_ctx, do nothing.
    692 */
    693void coroutine_fn aio_co_reschedule_self(AioContext *new_ctx);
    694
    695/**
    696 * aio_co_wake:
    697 * @co: the coroutine
    698 *
    699 * Restart a coroutine on the AioContext where it was running last, thus
    700 * preventing coroutines from jumping from one context to another when they
    701 * go to sleep.
    702 *
    703 * aio_co_wake may be executed either in coroutine or non-coroutine
    704 * context.  The coroutine must not be entered by anyone else while
    705 * aio_co_wake() is active.
    706 */
    707void aio_co_wake(struct Coroutine *co);
    708
    709/**
    710 * aio_co_enter:
    711 * @ctx: the context to run the coroutine
    712 * @co: the coroutine to run
    713 *
    714 * Enter a coroutine in the specified AioContext.
    715 */
    716void aio_co_enter(AioContext *ctx, struct Coroutine *co);
    717
    718/**
    719 * Return the AioContext whose event loop runs in the current thread.
    720 *
    721 * If called from an IOThread this will be the IOThread's AioContext.  If
    722 * called from the main thread or with the "big QEMU lock" taken it
    723 * will be the main loop AioContext.
    724 */
    725AioContext *qemu_get_current_aio_context(void);
    726
    727void qemu_set_current_aio_context(AioContext *ctx);
    728
    729/**
    730 * aio_context_setup:
    731 * @ctx: the aio context
    732 *
    733 * Initialize the aio context.
    734 */
    735void aio_context_setup(AioContext *ctx);
    736
    737/**
    738 * aio_context_destroy:
    739 * @ctx: the aio context
    740 *
    741 * Destroy the aio context.
    742 */
    743void aio_context_destroy(AioContext *ctx);
    744
    745/* Used internally, do not call outside AioContext code */
    746void aio_context_use_g_source(AioContext *ctx);
    747
    748/**
    749 * aio_context_set_poll_params:
    750 * @ctx: the aio context
    751 * @max_ns: how long to busy poll for, in nanoseconds
    752 * @grow: polling time growth factor
    753 * @shrink: polling time shrink factor
    754 *
    755 * Poll mode can be disabled by setting poll_max_ns to 0.
    756 */
    757void aio_context_set_poll_params(AioContext *ctx, int64_t max_ns,
    758                                 int64_t grow, int64_t shrink,
    759                                 Error **errp);
    760
    761/**
    762 * aio_context_set_aio_params:
    763 * @ctx: the aio context
    764 * @max_batch: maximum number of requests in a batch, 0 means that the
    765 *             engine will use its default
    766 */
    767void aio_context_set_aio_params(AioContext *ctx, int64_t max_batch,
    768                                Error **errp);
    769
    770#endif