[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 04/11] aio: introduce aio_co_schedule
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH 04/11] aio: introduce aio_co_schedule |
Date: |
Thu, 26 May 2016 12:19:43 -0700 |
User-agent: |
Mutt/1.6.0 (2016-04-01) |
On Tue, May 17, 2016 at 04:57:28PM +0200, Paolo Bonzini wrote:
> That said, there is at least another case where it will be used. In the
> dataplane branch, where AIO callbacks take the AioContext mutex
> themselves, we have:
>
> static void bdrv_co_io_em_complete(void *opaque, int ret)
> {
> CoroutineIOCompletion *co = opaque;
>
> co->ret = ret;
> aio_context_acquire(co->ctx);
> qemu_coroutine_enter(co->coroutine, NULL);
> aio_context_release(co->ctx);
> }
>
> ...
>
> acb = bs->drv->bdrv_aio_readv(bs, sector_num, iov, nb_sectors,
> bdrv_co_io_em_complete, &co);
> qemu_coroutine_yield();
>
> bdrv_co_io_em_complete here can be called before the coroutine has
> yielded. To prepare for the replacement of the AioContext mutex with
> fine-grained mutexes, I think bdrv_co_io_em_complete should do something
> like
>
> if (ctx != qemu_get_current_aio_context()) {
> aio_co_schedule(ctx, co->coroutine);
> return;
> }
>
> aio_context_acquire(ctx);
> qemu_coroutine_enter(co->coroutine, NULL);
> aio_context_release(ctx);
Okay, that makes sense.
signature.asc
Description: PGP signature