qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, richard.henderson@linaro.org, qemu-devel@nongnu.org
Subject: [PULL 01/19] block: Note on aio_co_wake use if not yet yielding
Date: Tue, 18 Nov 2025 18:02:38 +0100	[thread overview]
Message-ID: <20251118170256.272087-2-kwolf@redhat.com> (raw)
In-Reply-To: <20251118170256.272087-1-kwolf@redhat.com>

From: Hanna Czenczek <hreitz@redhat.com>

aio_co_wake() is generally safe to call regardless of whether the
coroutine is already yielding or not.  If it is not yet yielding, it
will be scheduled to run when it does yield.

Caveats:
- The caller must be independent of the coroutine (to ensure the
  coroutine must be yielding if both are in the same AioContext), i.e.
  must not be the same coroutine
- The coroutine must yield at some point

Make note of this so callers can reason that their use is safe.

Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
Message-ID: <20251110154854.151484-2-hreitz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 include/block/aio.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/block/aio.h b/include/block/aio.h
index f38b584ac7..6049e6a0f4 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -746,6 +746,21 @@ void coroutine_fn aio_co_reschedule_self(AioContext *new_ctx);
  * aio_co_wake may be executed either in coroutine or non-coroutine
  * context.  The coroutine must not be entered by anyone else while
  * aio_co_wake() is active.
+ *
+ * If `co`'s AioContext differs from the current AioContext, this will call
+ * aio_co_schedule(), which makes this safe to use even when `co` has not
+ * yielded yet.  In such a case, it will be entered once it yields.
+ *
+ * In contrast, if `co`'s AioContext is equal to the current one, it is
+ * required for `co` to currently be yielding.  This is generally the case
+ * if the caller is not in `co` (i.e. invoked by `co`), because the only
+ * other way for the caller to be running then is for `co` to currently be
+ * yielding.
+ *
+ * Therefore, if there is no way for the caller to be invoked/entered by
+ * `co`, it is generally safe to call this regardless of whether `co` is
+ * known to already be yielding or not -- it only has to yield at some
+ * point.
  */
 void aio_co_wake(Coroutine *co);
 
-- 
2.51.1



  reply	other threads:[~2025-11-18 17:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-18 17:02 [PULL 00/19] Block layer patches Kevin Wolf
2025-11-18 17:02 ` Kevin Wolf [this message]
2025-11-18 17:02 ` [PULL 02/19] rbd: Run co BH CB in the coroutine’s AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 03/19] iscsi: " Kevin Wolf
2025-11-18 17:02 ` [PULL 04/19] nfs: " Kevin Wolf
2025-11-18 17:02 ` [PULL 05/19] curl: Fix coroutine waking Kevin Wolf
2025-11-18 17:02 ` [PULL 06/19] gluster: Do not move coroutine into BDS context Kevin Wolf
2025-11-18 17:02 ` [PULL 07/19] nvme: Kick and check completions in " Kevin Wolf
2025-11-18 17:02 ` [PULL 08/19] nvme: Fix coroutine waking Kevin Wolf
2025-11-18 17:02 ` [PULL 09/19] nvme: Note in which AioContext some functions run Kevin Wolf
2025-11-18 17:02 ` [PULL 10/19] block/io: Take reqs_lock for tracked_requests Kevin Wolf
2025-11-18 17:02 ` [PULL 11/19] qcow2: Re-initialize lock in invalidate_cache Kevin Wolf
2025-11-18 17:02 ` [PULL 12/19] qcow2: Fix cache_clean_timer Kevin Wolf
2025-11-18 17:02 ` [PULL 13/19] qcow2: Schedule cache-clean-timer in realtime Kevin Wolf
2025-11-18 17:02 ` [PULL 14/19] ssh: Run restart_coroutine in current AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 15/19] blkreplay: Run BH in coroutine’s AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 16/19] block: Note in which AioContext AIO CBs are called Kevin Wolf
2025-11-18 17:02 ` [PULL 17/19] iscsi: Create AIO BH in original AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 18/19] null-aio: Run CB " Kevin Wolf
2025-11-18 17:02 ` [PULL 19/19] win32-aio: Run CB in original context Kevin Wolf
2025-11-19  9:44 ` [PULL 00/19] Block layer patches Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251118170256.272087-2-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).