[PATCH 3/7] Add iTCO watchdog support

Martin Kletzander mkletzan at redhat.com
Mon Jan 23 14:57:52 UTC 2023


Supported only with q35 machine types.

Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 src/conf/domain_conf.c            |  1 +
 src/conf/domain_conf.h            |  1 +
 src/conf/schemas/domaincommon.rng |  1 +
 src/qemu/qemu_domain_address.c    |  1 +
 src/qemu/qemu_validate.c          | 25 +++++++++++++++++++++++++
 5 files changed, 29 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7c61da1d765b..4a5f538a565a 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -837,6 +837,7 @@ VIR_ENUM_IMPL(virDomainWatchdogModel,
               "i6300esb",
               "ib700",
               "diag288",
+              "itco",
 );
 
 VIR_ENUM_IMPL(virDomainWatchdogAction,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index da785076151d..f125ace9c082 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1745,6 +1745,7 @@ typedef enum {
     VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB,
     VIR_DOMAIN_WATCHDOG_MODEL_IB700,
     VIR_DOMAIN_WATCHDOG_MODEL_DIAG288,
+    VIR_DOMAIN_WATCHDOG_MODEL_ITCO,
 
     VIR_DOMAIN_WATCHDOG_MODEL_LAST
 } virDomainWatchdogModel;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index a5d0505d9b9b..c051bb7a697d 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -5345,6 +5345,7 @@
             <value>i6300esb</value>
             <value>ib700</value>
             <value>diag288</value>
+            <value>itco</value>
           </choice>
         </attribute>
         <optional>
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index db4e91501d3f..a0168b2f2a2c 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -925,6 +925,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
 
         case VIR_DOMAIN_WATCHDOG_MODEL_IB700:
         case VIR_DOMAIN_WATCHDOG_MODEL_DIAG288:
+        case VIR_DOMAIN_WATCHDOG_MODEL_ITCO:
         case VIR_DOMAIN_WATCHDOG_MODEL_LAST:
             return 0;
         }
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index cb002dee0eb9..03f5a84ffec2 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -1191,6 +1191,7 @@ qemuValidateDomainDefTPMs(const virDomainDef *def)
 static int
 qemuValidateDomainDefWatchdogs(const virDomainDef *def)
 {
+    bool found_itco = false;
     ssize_t i = 0;
 
     for (i = 0; i < def->nwatchdogs; i++) {
@@ -1204,6 +1205,15 @@ qemuValidateDomainDefWatchdogs(const virDomainDef *def)
                              "with this QEMU binary"));
             return -1;
         }
+
+        if (def->watchdogs[i]->model == VIR_DOMAIN_WATCHDOG_MODEL_ITCO) {
+            if (found_itco) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("Multiple iTCO watchdogs are not supported"));
+                return -1;
+            }
+            found_itco = true;
+        }
     }
 
     return 0;
@@ -2410,6 +2420,21 @@ qemuValidateDomainWatchdogDef(const virDomainWatchdogDef *dev,
         }
         break;
 
+    case VIR_DOMAIN_WATCHDOG_MODEL_ITCO:
+        if (dev->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("%s model of watchdog is part of the machine and cannot have any address set."),
+                           virDomainWatchdogModelTypeToString(dev->model));
+            return -1;
+        }
+        if (!qemuDomainIsQ35(def)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("%s model of watchdog is only part of q35 machine"),
+                           virDomainWatchdogModelTypeToString(dev->model));
+            return -1;
+        }
+        break;
+
     case VIR_DOMAIN_WATCHDOG_MODEL_LAST:
     default:
         virReportEnumRangeError(virDomainWatchdogModel, dev->model);
-- 
2.39.1



More information about the libvir-list mailing list