[PATCH 2/6] conf: add panic model 'pvpanic'

Peter Krempa pkrempa at redhat.com
Wed Feb 8 12:05:59 UTC 2023


On Wed, Feb 08, 2023 at 12:49:01 +0100, Kristina Hanicova wrote:
> This patch introduces optional device pvpanic-pci, validates it's
> address and generates command line.
> 
> Signed-off-by: Kristina Hanicova <khanicov at redhat.com>
> ---
>  src/conf/domain_conf.c            |  1 +
>  src/conf/domain_conf.h            |  1 +
>  src/conf/schemas/domaincommon.rng |  1 +
>  src/qemu/qemu_command.c           | 19 +++++++++++++++++++
>  src/qemu/qemu_validate.c          | 16 ++++++++++++++++
>  5 files changed, 38 insertions(+)

> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 90dc6b5434..64fee74671 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -9557,6 +9557,25 @@ qemuBuildPanicCommandLine(virCommand *cmd,
>              break;
>          }
>  
> +        case VIR_DOMAIN_PANIC_MODEL_PVPANIC: {
> +            g_autoptr(virJSONValue) props = NULL;
> +
> +            if (virJSONValueObjectAdd(&props,
> +                                      "s:driver", "pvpanic-pci",
> +                                      NULL) < 0)
> +                return -1;
> +
> +            if (def->panics[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {

This check doesn't make much sense ...

> +                if (qemuBuildDeviceAddressProps(props, def, &def->panics[i]->info) < 0)

... as this does the correct thing for _NONE ...

> +                    return -1;
> +            }
> +
> +            if (qemuBuildDeviceCommandlineFromJSON(cmd, props, def, qemuCaps) < 0)
> +                return -1;
> +
> +            break;
> +        }
> +
>          case VIR_DOMAIN_PANIC_MODEL_S390:
>          case VIR_DOMAIN_PANIC_MODEL_HYPERV:
>          case VIR_DOMAIN_PANIC_MODEL_PSERIES:
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index c8c289ebb4..87adaaebdc 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -1146,6 +1146,22 @@ qemuValidateDomainDefPanic(const virDomainDef *def,
>              }
>              break;
>  
> +        case VIR_DOMAIN_PANIC_MODEL_PVPANIC:
> +            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PANIC_PCI)) {
> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("the QEMU binary does not support the "
> +                                 "PCI pvpanic device"));

Please no linebreaks in error messages.

> +                return -1;
> +            }
> +
> +            if (def->panics[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {

... and you also force the correct type here.

> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                               _("pvpanic is supported only "
> +                                 "with PCI address type"));

Same as above.

> +                return -1;
> +            }
> +            break;
> +
>          /* default model value was changed before in post parse */
>          case VIR_DOMAIN_PANIC_MODEL_DEFAULT:
>          case VIR_DOMAIN_PANIC_MODEL_LAST:
> -- 
> 2.39.1
> 


More information about the libvir-list mailing list