[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