From 2f469c062c9ed2dbdd40b5eb5b2665dca60ebb96 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 25 Nov 2016 17:08:25 +0100 Subject: [PATCH] qemu: capabilities: Don't partially reprope caps on process reconnect Thanks to the complex capability caching code virQEMUCapsProbeQMP was never called when we were starting a new qemu VM. On the other hand, when we are reconnecting to the qemu process we reload the capability list from the status XML file. This means that the flag preventing the function being called was not set and thus we partially reprobed some of the capabilities. The recent addition of CPU hotplug clears the QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS if the machine does not support it. The partial re-probe on reconnect results into attempting to call the unsupported command and then killing the VM. Remove the partial reprobe and depend on the stored capabilities. If it will be necessary to reprobe the capabilities in the future, we should do a full reprobe rather than this partial one. (cherry picked from commit b87a11340fb444f669d1a3e2ffb3680490c10134) --- src/qemu/qemu_capabilities.c | 17 ----------------- src/qemu/qemu_capabilities.h | 3 --- src/qemu/qemu_process.c | 4 ---- 3 files changed, 24 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2ca78031cb..f0b70d5684 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -2817,23 +2817,6 @@ virQEMUCapsProbeQMPGICCapabilities(virQEMUCapsPtr qemuCaps, return 0; } -int virQEMUCapsProbeQMP(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon) -{ - VIR_DEBUG("qemuCaps=%p mon=%p", qemuCaps, mon); - - if (qemuCaps->usedQMP) - return 0; - - if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0) - return -1; - - if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0) - return -1; - - return 0; -} - /* * Parsing a doc that looks like diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index a74d39f2b9..e0f4d6ee00 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -390,9 +390,6 @@ virQEMUCapsPtr virQEMUCapsNew(void); int virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, qemuMonitorPtr mon); -int virQEMUCapsProbeQMP(virQEMUCapsPtr qemuCaps, - qemuMonitorPtr mon); - void virQEMUCapsSet(virQEMUCapsPtr qemuCaps, virQEMUCapsFlags flag) ATTRIBUTE_NONNULL(1); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index b10b05359d..03ccf4d8c2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1726,10 +1726,6 @@ qemuConnectMonitor(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob, if (qemuMonitorSetCapabilities(priv->mon) < 0) goto cleanup; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON) && - virQEMUCapsProbeQMP(priv->qemuCaps, priv->mon) < 0) - goto cleanup; - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT) && qemuMonitorSetMigrationCapability(priv->mon, QEMU_MONITOR_MIGRATION_CAPS_EVENTS,