[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 2/2] aio: Do aio_notify_accept only during bl
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/2] aio: Do aio_notify_accept only during blocking aio_poll |
Date: |
Tue, 7 Aug 2018 22:11:03 +0800 |
User-agent: |
Mutt/1.10.0 (2018-05-17) |
On Tue, 08/07 12:15, Paolo Bonzini wrote:
> On 07/08/2018 11:16, Fam Zheng wrote:
> > main thread IO Thread
> > ===============================================================
> > bdrv_drained_begin()
> > aio_disable_external(ctx)
> > aio_poll(ctx, true)
> > ctx->notify_me += 2
> > ppoll() /* blocked */
> > ...
> > bdrv_drained_end()
> > ...
> > aio_notify()
[2] ^^^^^
> > ...
> > bdrv_set_aio_context()
> > aio_poll(ctx, false)
> > [1] aio_notify_accept(ctx)
> > /* Hang! */
>
> Should ppoll() rather be after [1]? Otherwise the new commit message
> and patches look great.
Good point. They race and I think aio_notify_accept() is indeed done before
ppoll() starts its waiting. I will finish testing and send v3.
Fam
>
> > aio_notify() only injects an event when ctx->notify_me is set,
> > correspondingly aio_notify_accept() is only useful when ctx->notify_me
> > _was_ set.
>
> Very good point.
>
> (Please Cc qemu-stable on the second patch too).
>
> Paolo