[libvirt] [PATCH] qemu: capabilities: Don't partially reprope caps on process reconnect

Boris Fiuczynski fiuczy at linux.vnet.ibm.com
Mon Nov 28 09:59:35 UTC 2016


Peter,
besides the trivial typo in the subject line (s/reprope/reprobe) I agree 
that this is the correct fix for the capability problem when 
reconnecting to the qemu processes. Thanks.

I suggest that you mention in the patch description that libvirt 
starting with version 2.2.0 is terminating all running qemu domains if 
the qemu binaries do not implement/have not enabled the qmp command 
'query-hotpluggable-cpus'.
Including the user observable internal error message for reference would 
maybe help as well. (internal error: unable to execute QEMU command 
'query-hotpluggable-cpus': The feature 'query-hotpluggable-cpus' is not 
enabled)

In addition this patch looks to me like a good candidate for the 
maintenance branches.

Tested-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>

On 11/25/2016 05:14 PM, Peter Krempa wrote:
> 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.
> ---
>  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 8901e7b..37e5302 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2937,23 +2937,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;
> -}
> -
>
>  static bool
>  virQEMUCapsCPUFilterFeatures(const char *name,
> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index 5255815..be71507 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -403,9 +403,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 ab0c2c8..90f1101 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -1723,10 +1723,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,
>


-- 
Mit freundlichen Grüßen/Kind regards
    Boris Fiuczynski

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




More information about the libvir-list mailing list