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

Kristina Hanicova khanicov at redhat.com
Mon Feb 20 16:12:55 UTC 2023


This patch introduces optional device pvpanic-pci, validates its
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           | 17 +++++++++++++++++
 src/qemu/qemu_validate.c          | 14 ++++++++++++++
 5 files changed, 34 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a5578324b9..33ab67db51 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -859,6 +859,7 @@ VIR_ENUM_IMPL(virDomainPanicModel,
               "pseries",
               "hyperv",
               "s390",
+              "pvpanic",
 );
 
 VIR_ENUM_IMPL(virDomainVideoBackend,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 62f80d653d..e32c229c1a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2677,6 +2677,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;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index a57dd212ab..ab4886b783 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -8289,6 +8289,7 @@
             <value>pseries</value>
             <value>hyperv</value>
             <value>s390</value>
+            <value>pvpanic</value>
           </choice>
         </attribute>
       </optional>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 90dc6b5434..4839d45a34 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -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:
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index c8c289ebb4..12055d5402 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -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:
-- 
2.39.1



More information about the libvir-list mailing list