The MSDM ACPI table is a replacement for the SLIC table type, now
preferred by Microsoft for Windows Licensing checks:
https://learn.microsoft.com/en-us/previous-versions/windows/hardware/desi...
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/formatdomain.rst | 4 ++--
src/conf/domain_conf.c | 1 +
src/conf/domain_conf.h | 1 +
src/conf/schemas/domaincommon.rng | 5 ++++-
src/libvirt_private.syms | 2 ++
src/libxl/libxl_domain.c | 7 +++++++
src/qemu/qemu_validate.c | 7 +++++++
7 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 381bf84f67..81dfd310ae 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -485,8 +485,8 @@ These options apply to any form of booting of the guest OS.
``acpi``
The ``table`` element contains a fully-qualified path to the ACPI table. The
- ``type`` attribute contains the ACPI table type (currently only ``slic`` is
- supported) :since:`Since 1.3.5 (QEMU)` :since:`Since 5.9.0 (Xen)`
+ ``type`` attribute contains the ACPI table type: ``slic`` (:since:`Since 1.3.5
(QEMU)`
+ :since:`Since 5.9.0 (Xen)`, ``msdm``.
SMBIOS System Information
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 04fb893587..e0f9ad3123 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1460,6 +1460,7 @@ VIR_ENUM_IMPL(virDomainOsDefFirmwareFeature,
VIR_ENUM_IMPL(virDomainOsACPITable,
VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST,
"slic",
+ "msdm",
);
VIR_ENUM_IMPL(virDomainCFPC,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7735cce325..d84da21cca 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2476,6 +2476,7 @@ VIR_ENUM_DECL(virDomainOsDefFirmwareFeature);
typedef enum {
VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC,
+ VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM,
VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST
} virDomainOsACPITable;
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index 3328a63205..9bae953295 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -7191,7 +7191,10 @@
<zeroOrMore>
<element name="table">
<attribute name="type">
- <value>slic</value>
+ <choice>
+ <value>slic</value>
+ <value>msdm</value>
+ </choice>
</attribute>
<ref name="absFilePath"/>
</element>
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 30a9f806f0..db8c29ec1d 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -611,6 +611,8 @@ virDomainObjTaint;
virDomainObjUpdateModificationImpact;
virDomainObjWait;
virDomainObjWaitUntil;
+virDomainOsACPITableTypeFromString;
+virDomainOsACPITableTypeToString;
virDomainOsDefFirmwareTypeFromString;
virDomainOsDefFirmwareTypeToString;
virDomainOSTypeFromString;
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 816ed2f349..5fb85931f4 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -336,6 +336,13 @@ libxlDomainDefValidate(const virDomainDef *def,
case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC:
break;
+ case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("ACPI table '%1$s' not supported"),
+ virDomainOsACPITableTypeToString(
+ def->os.acpiTables[i]->type));
+ return -1;
+
default:
case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST:
virReportEnumRangeError(virDomainOsACPITable,
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 039f5f84e6..0b3efcd700 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -747,6 +747,13 @@ qemuValidateDomainDefBoot(const virDomainDef *def,
case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC:
break;
+ case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("ACPI table '%1$s' not supported"),
+ virDomainOsACPITableTypeToString(
+ def->os.acpiTables[i]->type));
+ return -1;
+
default:
case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST:
virReportEnumRangeError(virDomainOsACPITable,
--
2.47.1