]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: add panic model 'pvpanic'
authorKristina Hanicova <khanicov@redhat.com>
Mon, 20 Feb 2023 16:12:55 +0000 (17:12 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 21 Feb 2023 16:51:23 +0000 (17:51 +0100)
This patch introduces optional device pvpanic-pci, validates its
address and generates command line.

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/conf/schemas/domaincommon.rng
src/qemu/qemu_command.c
src/qemu/qemu_validate.c

index 3dfc5c87af3c10a688e6b650587ccbbe2bfda65a..651f2ad279ff5ae57c766647fb209761e19fe42d 100644 (file)
@@ -859,6 +859,7 @@ VIR_ENUM_IMPL(virDomainPanicModel,
               "pseries",
               "hyperv",
               "s390",
+              "pvpanic",
 );
 
 VIR_ENUM_IMPL(virDomainVideoBackend,
index 7d58efb01170036a6c0a1b9a5a7f41eabf344623..31839c96e5ffe21ebca78f8c8dbfab7f6a335e9c 100644 (file)
@@ -2676,6 +2676,7 @@ typedef enum {
     VIR_DOMAIN_PANIC_MODEL_PSERIES,
     VIR_DOMAIN_PANIC_MODEL_HYPERV,
     VIR_DOMAIN_PANIC_MODEL_S390,
+    VIR_DOMAIN_PANIC_MODEL_PVPANIC,
 
     VIR_DOMAIN_PANIC_MODEL_LAST
 } virDomainPanicModel;
index a57dd212ab5c3556a1afcba5e97c785eebac388c..ab4886b7833bbe6dc7755e8339191d319600e316 100644 (file)
             <value>pseries</value>
             <value>hyperv</value>
             <value>s390</value>
+            <value>pvpanic</value>
           </choice>
         </attribute>
       </optional>
index 90dc6b54343680de04bf397b71af84c9bd283fdd..4839d45a34dbc592cc41315f0e6021fcb4ed7fdd 100644 (file)
@@ -9557,6 +9557,23 @@ 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 (qemuBuildDeviceAddressProps(props, def, &def->panics[i]->info) < 0)
+                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:
index c8c289ebb44aadf441c8ca85cdc4f55509e4d7e0..12055d5402ebb6b00f88858419abbba76955af87 100644 (file)
@@ -1146,6 +1146,20 @@ 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"));
+                return -1;
+            }
+
+            if (def->panics[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("pvpanic is supported only with PCI address type"));
+                return -1;
+            }
+            break;
+
         /* default model value was changed before in post parse */
         case VIR_DOMAIN_PANIC_MODEL_DEFAULT:
         case VIR_DOMAIN_PANIC_MODEL_LAST: