]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: add panic device support for S390
authorBoris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Fri, 29 Apr 2016 13:23:41 +0000 (15:23 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Mon, 2 May 2016 15:01:40 +0000 (17:01 +0200)
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@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
docs/formatdomain.html.in
docs/schemas/domaincommon.rng
src/conf/domain_conf.c
src/conf/domain_conf.h
src/qemu/qemu_command.c
src/qemu/qemu_domain.c

index 3e72dae2dcbb36c668bad6d4a0d622f3c8111196..bead624606c9bab0def4d503bf7d313e5b2fc75b 100644 (file)
@@ -6355,9 +6355,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 guests, since it's an integral part of the S390 architecture</li>
+    </ul>
+    <p>
+      For the guest types listed above, libvirt automatically adds a
+      <code>panic</code> element to the domain XML.
     </p>
     <p>
       Example: usage of panic configuration
@@ -6385,6 +6391,8 @@ qemu-kvm -net nic,model=? /dev/null
           <li>'pseries' &mdash; default and valid only for pSeries guests.</li>
           <li>'hyperv' &mdash; for Hyper-V crash CPU feature.
             <span class="since">Since 1.3.0, QEMU and KVM only</span></li>
+          <li>'s390' &mdash; default for S390 guests.
+            <span class="since">Since 1.3.5</span></li>
         </ul>
       </dd>
     <dt><code>address</code></dt>
@@ -6392,7 +6400,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>
index f143bf05bbf679bc4a5d6e968b38d00e74132c6c..b82f8c856ed68bb8d2caf198e5ef1ffc6e53b244 100644 (file)
             <value>isa</value>
             <value>pseries</value>
             <value>hyperv</value>
+            <value>s390</value>
           </choice>
         </attribute>
       </optional>
index 033aa8eae1cc06922f968039c113e1eb4379089a..a8b517382ac1f6e2235a70c4839864ffa3861e24 100644 (file)
@@ -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",
index 9f880b89e334e87d80b79e2e32d2492fee7f392a..c2fa3b81007c55309393da26ddee0aa7c4f4b20d 100644 (file)
@@ -2083,6 +2083,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;
index f015ea49ed3331953d8774f8df35b107cc821747..bd564db5bd9533bb21748d76fae3430f90e60d83 100644 (file)
@@ -9001,6 +9001,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
index b71c655ec830a718a35bb24856f939919d7abb84..a485cf0f89085b240ff6878b568d027098e8f3ba 100644 (file)
@@ -2196,6 +2196,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;
     }