[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 10/20] block: drain from main loop thread in bdrv_co_yield
From: |
Kevin Wolf |
Subject: |
Re: [PATCH v4 10/20] block: drain from main loop thread in bdrv_co_yield_to_drain() |
Date: |
Tue, 2 May 2023 18:21:20 +0200 |
Am 25.04.2023 um 19:27 hat Stefan Hajnoczi geschrieben:
> For simplicity, always run BlockDevOps .drained_begin/end/poll()
> callbacks in the main loop thread. This makes it easier to implement the
> callbacks and avoids extra locks.
>
> Move the function pointer declarations from the I/O Code section to the
> Global State section in block-backend-common.h.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
If we're updating function pointers, we should probably update them in
BdrvChildClass and BlockDriver, too.
This means that a non-coroutine caller can't run in an iothread, not
even the home iothread of the BlockDriverState. (I'm not sure if it was
allowed previously. I don't think we're actually doing this, but in
theory it could have worked.) Maybe put a GLOBAL_STATE_CODE() after
handling the bdrv_co_yield_to_drain() case? Or would that look too odd?
IO_OR_GS_CODE();
if (qemu_in_coroutine()) {
bdrv_co_yield_to_drain(bs, true, parent, poll);
return;
}
GLOBAL_STATE_CODE();
Kevin
- Re: [PATCH v4 10/20] block: drain from main loop thread in bdrv_co_yield_to_drain(),
Kevin Wolf <=