qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Qemu-block] coroutines: block: Co-routine re-entered r


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [Qemu-block] coroutines: block: Co-routine re-entered recursively when migrating disk with iothreads
Date: Thu, 9 Jun 2016 09:48:18 +0100

On Thu, Jun 9, 2016 at 9:47 AM, Stefan Hajnoczi <address@hidden> wrote:
> On Thu, Jun 9, 2016 at 9:25 AM, Paolo Bonzini <address@hidden> wrote:
>> On 09/06/2016 09:35, Stefan Hajnoczi wrote:
>>>
>>>     if (s->dataplane) {
>>>         virtio_blk_data_plane_stop(s->dataplane);
>>>     }
>>>
>>>     virtio_save(vdev, f);
>>> }
>>>
>>> We reach the situation I described where BDS AioContext changes but
>>> mirror_run() is still in the IOThread AioContext.
>>
>> Why is the virtio_blk_data_plane_stop necessary?  It used to sync
>> between vring and virtio state, but that's not required anymore---and we
>> know that the virtqueues are quiescent at this point...
>
> I agree.  It doesn't seem necessary anymore unless I'm missing a race
> condition with ioeventfd.
>
> It was introduced so that the savevm command (without live migration!) works:
>
> commit 10a06fd65f667a972848ebbbcac11bdba931b544
> Author: Pavel Butsykin <address@hidden>
> Date:   Mon Oct 26 14:42:57 2015 +0300
>
>     virtio: sync the dataplane vring state to the virtqueue before virtio_save
>
> We can remove it now.

BTW this doesn't mean that the blockjobs AioContext following problem
is solved.  AioContexts can still change if the guest resets the
virtio device, for example.

I suspect we'll still hit undefined behavior when that happens.

Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]