[libvirt] [PATCHv4 2/6] qemu: add support for hv_crash feature as a panic device

Jiri Denemark jdenemar at redhat.com
Thu Nov 19 21:55:53 UTC 2015


On Fri, Nov 13, 2015 at 20:16:36 +0300, Dmitry Andreev wrote:
> Panic device type used depends on 'model' attribute.
> 
> If no model is specified then device type depends on hypervisor
> and guest arch. 'pseries' model is used for pSeries guest and
> 'isa' model is used in other cases.
> 
> XML:
> <devices>
>   <panic model='hyperv'/>
> </devices>
> 
> QEMU command line:
> qemu -cpu <cpu_model>,hv_crash
> ---
>  src/qemu/qemu_command.c | 64 +++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 59 insertions(+), 5 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 792ada3..2d0cec0 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
...
> @@ -11150,17 +11160,49 @@ qemuBuildCommandLine(virConnectPtr conn,
>      }
>  
>      if (def->panic) {
> -        if (ARCH_IS_PPC64(def->os.arch) && STRPREFIX(def->os.machine, "pseries")) {
> -            /* For pSeries guests, the firmware provides the same
> -             * functionality as the pvpanic device. The address
> +        virDomainPanicModel model = def->panic->model;
> +
> +        if (model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) {
> +            if (ARCH_IS_PPC64(def->os.arch) &&
> +                STRPREFIX(def->os.machine, "pseries"))
> +                model = VIR_DOMAIN_PANIC_MODEL_PSERIES;
> +            else
> +                model = VIR_DOMAIN_PANIC_MODEL_ISA;
> +        }

This code should go in the post parse callback.

> +
> +        switch (model) {
> +        case VIR_DOMAIN_PANIC_MODEL_HYPERV:
> +            /* Panic with model 'hyperv' is not a device, it should
> +             * be configured in cpu commandline. The address
>               * cannot be configured by the user */
>              if (def->panic->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
>                  virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                                 _("setting the panic device address is not "
> -                                 "supported for pSeries guests"));
> +                                 "supported for model 'hyperv'"));
>                  goto error;
>              }

Should we also reject hyperv model if !ARCH_IS_X86 similarly to what we
do for pseries model? Another big question is what happens if you try
<panic model='hyperv'/> with QEMU < 2.5.0? Will it fail (that would be
OK) or does QEMU just ignore the unknown CPU feature and starts anyway
(not OK)?

> -        } else {
> +            break;
> +
> +        case VIR_DOMAIN_PANIC_MODEL_PSERIES:
> +            if (ARCH_IS_PPC64(def->os.arch) && STRPREFIX(def->os.machine, "pseries")) {
> +                /* For pSeries guests, the firmware provides the same
> +                 * functionality as the pvpanic device. The address
> +                 * cannot be configured by the user */
> +                if (def->panic->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
> +                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                                   _("setting the panic device address is not "
> +                                     "supported for model 'pseries'"));
> +                    goto error;
> +                }
> +            } else {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("only pSeries guests support panic device "
> +                                 "with model 'pseries'"));
> +                goto error;
> +            }
> +            break;
> +
> +        case VIR_DOMAIN_PANIC_MODEL_ISA:
>              if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PANIC)) {
>                  virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                                 _("the QEMU binary does not support the "
...

Jirka




More information about the libvir-list mailing list