Supported only with q35 machine types.
Signed-off-by: Martin Kletzander <mkletzan(a)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