If a panic device is being defined without a model in a domain the default value is always overwritten with model ISA. An ISA bus does not exist on S390 and therefore specifying a panic device results in an unsupported configuration. Since the S390 architecture inherently provides a crash detection capability the panic device should be defined in the domain xml. This patch adds an s390 panic device model and prevents setting a device address on it. Signed-off-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxxxxxxx> Reviewed-by: Cornelia Huck <cornelia.huck@xxxxxxxxxx> --- docs/formatdomain.html.in | 16 ++++++++++++---- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 ++- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 19 +++++++++++++++++++ src/qemu/qemu_domain.c | 2 ++ 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index d2db53b..81f4d48 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -6365,9 +6365,15 @@ qemu-kvm -net nic,model=? /dev/null <span class="since">Since 1.2.1, QEMU and KVM only</span> </p> <p> - For pSeries guests, this feature is always enabled since it's - implemented by the guest firmware, thus libvirt automatically - adds the <code>panic</code> element to the domain XML. + This feature is always enabled for: + </p> + <ul> + <li>pSeries guests since it's implemented by the guest firmware.</li> + <li>S390 guest since it's an integral part of the S390 architecture.</li> + </ul> + <p> + Thus libvirt automatically adds the <code>panic</code> element to the + domain XML. </p> <p> Example: usage of panic configuration @@ -6395,6 +6401,8 @@ qemu-kvm -net nic,model=? /dev/null <li>'pseries' — default and valid only for pSeries guests.</li> <li>'hyperv' — for Hyper-V crash CPU feature. <span class="since">Since 1.3.0, QEMU and KVM only</span></li> + <li>'s390' — default for S390 guests. + <span class="since">Since 1.3.5</span></li> </ul> </dd> <dt><code>address</code></dt> @@ -6402,7 +6410,7 @@ qemu-kvm -net nic,model=? /dev/null <p> address of panic. The default ioport is 0x505. Most users don't need to specify an address, and doing so is forbidden - altogether for pseries and hyperv models. + altogether for s390, pseries and hyperv models. </p> </dd> </dl> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index f77bbcf..ce4f551 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5523,6 +5523,7 @@ <value>isa</value> <value>pseries</value> <value>hyperv</value> + <value>s390</value> </choice> </attribute> </optional> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d8bed67..b99c00c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -525,7 +525,8 @@ VIR_ENUM_IMPL(virDomainPanicModel, VIR_DOMAIN_PANIC_MODEL_LAST, "default", "isa", "pseries", - "hyperv") + "hyperv", + "s390") VIR_ENUM_IMPL(virDomainVideo, VIR_DOMAIN_VIDEO_TYPE_LAST, "vga", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 31e7a86..ce40aa8 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2082,6 +2082,7 @@ typedef enum { VIR_DOMAIN_PANIC_MODEL_ISA, VIR_DOMAIN_PANIC_MODEL_PSERIES, VIR_DOMAIN_PANIC_MODEL_HYPERV, + VIR_DOMAIN_PANIC_MODEL_S390, VIR_DOMAIN_PANIC_MODEL_LAST } virDomainPanicModel; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6fbfe21..05071f0 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9046,6 +9046,25 @@ qemuBuildPanicCommandLine(virCommandPtr cmd, for (i = 0; i < def->npanics; i++) { switch ((virDomainPanicModel) def->panics[i]->model) { + case VIR_DOMAIN_PANIC_MODEL_S390: + /* For s390 guests, the hardware provides the same + * functionality as the pvpanic device. The address + * cannot be configured by the user */ + if (!ARCH_IS_S390(def->os.arch)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only S390 guests support " + "panic device of model 's390'")); + return -1; + } + if (def->panics[i]->info.type != + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("setting the panic device address is not " + "supported for model 's390'")); + return -1; + } + break; + case VIR_DOMAIN_PANIC_MODEL_HYPERV: /* Panic with model 'hyperv' is not a device, it should * be configured in cpu commandline. The address diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6262bfe..6897fe0 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1909,6 +1909,8 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, if (ARCH_IS_PPC64(def->os.arch) && STRPREFIX(def->os.machine, "pseries")) dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES; + else if (ARCH_IS_S390(def->os.arch)) + dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_S390; else dev->data.panic->model = VIR_DOMAIN_PANIC_MODEL_ISA; } -- 2.3.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list