From 41d37d31b3ea7105bb3a4cc064032a7fe6142f04 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Mon, 4 Feb 2019 13:36:24 +0100 Subject: [PATCH] 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 --- 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 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;