[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 4/5] aio-posix: Skip external nodes in aio_dispat
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PULL 4/5] aio-posix: Skip external nodes in aio_dispatch |
Date: |
Mon, 9 May 2016 12:58:05 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 |
On 22/04/2016 17:05, Kevin Wolf wrote:
> From: Fam Zheng <address@hidden>
>
> aio_poll doesn't poll the external nodes so this should never be true,
> but aio_ctx_dispatch may get notified by the events from GSource. To
> make bdrv_drained_begin effective in main loop, we should check the
> is_external flag here too.
>
> Also do the check in aio_pending so aio_dispatch is not called
> superfluously, when there is no events other than external ones.
>
> Signed-off-by: Fam Zheng <address@hidden>
> Reviewed-by: Jeff Cody <address@hidden>
> Signed-off-by: Kevin Wolf <address@hidden>
Are you going to do the aio-win32 version? I'm not sure what's the
state of ioeventfd emulation.
Paolo
> ---
> aio-posix.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/aio-posix.c b/aio-posix.c
> index 7fd565f..6006122 100644
> --- a/aio-posix.c
> +++ b/aio-posix.c
> @@ -282,10 +282,12 @@ bool aio_pending(AioContext *ctx)
> int revents;
>
> revents = node->pfd.revents & node->pfd.events;
> - if (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR) && node->io_read) {
> + if (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR) && node->io_read &&
> + aio_node_check(ctx, node->is_external)) {
> return true;
> }
> - if (revents & (G_IO_OUT | G_IO_ERR) && node->io_write) {
> + if (revents & (G_IO_OUT | G_IO_ERR) && node->io_write &&
> + aio_node_check(ctx, node->is_external)) {
> return true;
> }
> }
> @@ -323,6 +325,7 @@ bool aio_dispatch(AioContext *ctx)
>
> if (!node->deleted &&
> (revents & (G_IO_IN | G_IO_HUP | G_IO_ERR)) &&
> + aio_node_check(ctx, node->is_external) &&
> node->io_read) {
> node->io_read(node->opaque);
>
> @@ -333,6 +336,7 @@ bool aio_dispatch(AioContext *ctx)
> }
> if (!node->deleted &&
> (revents & (G_IO_OUT | G_IO_ERR)) &&
> + aio_node_check(ctx, node->is_external) &&
> node->io_write) {
> node->io_write(node->opaque);
> progress = true;
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PULL 4/5] aio-posix: Skip external nodes in aio_dispatch,
Paolo Bonzini <=