From: Marc Hartmayer Date: Mon, 4 Feb 2019 12:36:24 +0000 (+0100) Subject: qemu: Refresh state before starting the VCPUs X-Git-Tag: v5.1.0-rc1~254 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41d37d31b3ea7105bb3a4cc064032a7fe6142f04;p=thirdparty%2Flibvirt.git qemu: Refresh state before starting the VCPUs 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 Reviewed-by: Peter Krempa --- diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index dace5aaca1..0583eb03f2 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 { + /* Refresh state of devices from QEMU. During migration this happens + * in qemuMigrationDstFinish to ensure that state information is fully + * transferred. */ + 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;