[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: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH v4 10/20] block: drain from main loop thread in bdrv_co_yield_to_drain() |
Date: |
Tue, 2 May 2023 16:10:29 -0400 |
On Tue, May 02, 2023 at 06:21:20PM +0200, Kevin Wolf wrote:
> 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.
I'll do that in the next revision.
> 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();
That looks good to me, it makes explicit that IO_OR_GS_CODE() only
applies until the end of the if statement.
Stefan
signature.asc
Description: PGP signature