[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule(
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry |
Date: |
Tue, 28 Nov 2017 17:14:16 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 |
On 28/11/2017 16:43, Kevin Wolf wrote:
> + /* Make sure that a coroutine that can alternatively reentered from two
> + * different sources isn't reentered more than once when the first caller
> + * uses aio_co_schedule() and the other one enters to coroutine directly.
> + * This is achieved by cancelling the pending aio_co_schedule().
> + *
> + * The other way round, if aio_co_schedule() would be called after this
> + * point, this would be a problem, too, but in practice it doesn't happen
> + * because we're holding the AioContext lock here and aio_co_schedule()
> + * callers must do the same.
No, this is not true. aio_co_schedule is thread-safe.
> This means that the coroutine just needs to
> + * prevent other callers from calling aio_co_schedule() before it yields
> + * (e.g. block job coroutines by setting job->busy = true).
> + *
> + * We still want to ensure that the second case doesn't happen, so reset
> + * co->scheduled only after setting co->caller to make the above check
> + * effective for the co_schedule_bh_cb() case. */
> + atomic_set(&co->scheduled, NULL);
This doesn't work. The coroutine is still in the list, and if someone
calls aio_co_schedule again now, any coroutines linked from "co" via
co_scheduled_next are lost.
(Also, the AioContext lock is by design not protecting any state in
AioContext itself; the AioContext lock is only protecting things that
run in an AioContext but do not have their own lock).
Paolo
> +
> ret = qemu_coroutine_switch(self, co, COROUTINE_ENTER);
>
> qemu_co_queue_run_restart(co);
>
- [Qemu-devel] [PATCH for-2.11 0/4] Fix qemu-iotests failures, Kevin Wolf, 2017/11/28
- [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Kevin Wolf, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Jeff Cody, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Kevin Wolf, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Jeff Cody, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Paolo Bonzini, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Jeff Cody, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Paolo Bonzini, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Kevin Wolf, 2017/11/28
- Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Paolo Bonzini, 2017/11/28
Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Fam Zheng, 2017/11/28
Re: [Qemu-devel] [PATCH for-2.11 3/4] coroutine: Cancel aio_co_schedule() on direct entry, Eric Blake, 2017/11/28
[Qemu-devel] [PATCH for-2.11 2/4] Revert "blockjob: do not allow coroutine double entry or entry-after-completion", Kevin Wolf, 2017/11/28