[libvirt] [PATCH] qemu: Refresh state before starting the VCPUs

Marc Hartmayer mhartmay at linux.ibm.com
Mon Feb 4 13:41:05 UTC 2019


On Mon, Feb 04, 2019 at 02:37 PM +0100, Marc Hartmayer <mhartmay at linux.ibm.com> wrote:
> On Mon, Feb 04, 2019 at 01:41 PM +0100, Peter Krempa <pkrempa at redhat.com> wrote:
>> On Mon, Feb 04, 2019 at 13:36:24 +0100, Marc Hartmayer wrote:
>>> For normal starts (no incoming migration) the refresh of the QEMU
>>> state must be done before the VCPUs getting started since otherwise
>>> there might be a race condition between a possible shutdown of the
>>> guest OS and the QEMU monitor queries.
>>>
>>> This fixes "qemu: migration: Refresh device information after
>>> transferring state" (93db7eea1b864).
>>>
>>> Signed-off-by: Marc Hartmayer <mhartmay at linux.ibm.com>
>>> ---
>>>  src/qemu/qemu_process.c | 20 +++++++++++---------
>>>  1 file changed, 11 insertions(+), 9 deletions(-)
>>>
>>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>>> index dace5aaca102..2a3763f40d49 100644
>>> --- a/src/qemu/qemu_process.c
>>> +++ b/src/qemu/qemu_process.c
>>> @@ -6929,10 +6929,17 @@ qemuProcessStart(virConnectPtr conn,
>>>      }
>>>      relabel = true;
>>>
>>> -    if (incoming &&
>>> -        incoming->deferredURI &&
>>> -        qemuMigrationDstRun(driver, vm, incoming->deferredURI, asyncJob) < 0)
>>> -        goto stop;
>>> +    if (incoming) {
>>> +        if (incoming->deferredURI &&
>>> +            qemuMigrationDstRun(driver, vm, incoming->deferredURI, asyncJob) < 0)
>>> +            goto stop;
>>> +    } else {
>>
>> This logic does not seem right ...
>
> I’m not familiar with the usage of this function for migration… so
> there's a good chance I'm missing something.
>
>>
>>> +        /* Refresh state of devices from QEMU. During migration this
>>> +         * needs to happen after the state information is fully
>>> +         * transferred. */
>>
>> as this comment clearly states that this should happen after
>> migration.
>
> Is qemuProcessFinishStartup
     ^^^^^^^^^^^^^^^^^^^^^^^^
     qemuProcessRefreshState

> not called explicitly in qemuMigrationFinish
> for migration?
>
>>
>> Here it would happen only when migration is not done.
>
> Without this patch qemuProcessRefreshState is called after
> qemuProcessFinishStartup if (!incoming). Now it’s called directly before
> qemuProcessFinishStartup if (!incoming). Why should this be wrong now?
> What happens in qemuProcessFinishStartup?
>
> Before your change in 93db7eea1b86408e the function call
> 'qemuProcessRefreshState' was done in qemuProcessFinishStartup (without
> any condition).
>
> Thanks.
>
>>
>>
>>> +        if (qemuProcessRefreshState(driver, vm, asyncJob) < 0)
>>> +            goto stop;
>>> +    }
>>>
>>>      if (qemuProcessFinishStartup(driver, vm, asyncJob,
>>>                                   !(flags & VIR_QEMU_PROCESS_START_PAUSED),
>>> @@ -6945,11 +6952,6 @@ qemuProcessStart(virConnectPtr conn,
>>>          /* Keep watching qemu log for errors during incoming migration, otherwise
>>>           * unset reporting errors from qemu log. */
>>>          qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL);
>>> -
>>> -        /* Refresh state of devices from qemu. During migration this needs to
>>> -         * happen after the state information is fully transferred. */
>>> -        if (qemuProcessRefreshState(driver, vm, asyncJob) < 0)
>>> -            goto stop;
>>>      }
>>>
>>>      ret = 0;
>>> --
>>> 2.17.0
>>>
> --
> Kind regards / Beste Grüße
>    Marc Hartmayer
>
> IBM Deutschland Research & Development GmbH
> Vorsitzende des Aufsichtsrats: Matthias Hartmann
> Geschäftsführung: Dirk Wittkopp
> Sitz der Gesellschaft: Böblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
--
Kind regards / Beste Grüße
   Marc Hartmayer

IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Matthias Hartmann
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294





More information about the libvir-list mailing list