[PATCH 3/4] conf: support MSDM ACPI table type

Daniel P. Berrangé posted 4 patches 10 months ago
[PATCH 3/4] conf: support MSDM ACPI table type
Posted by Daniel P. Berrangé 10 months ago
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/design/dn653305(v=vs.85)

Signed-off-by: Daniel P. Berrangé <berrange@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
Re: [PATCH 3/4] conf: support MSDM ACPI table type
Posted by Michal Prívozník 10 months ago
On 2/18/25 19:12, Daniel P. Berrangé wrote:
> 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/design/dn653305(v=vs.85)
> 
> Signed-off-by: Daniel P. Berrangé <berrange@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(-)

Please consider squashing in the following:


diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 81dfd310ae..ae46b6e88d 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -485,8 +485,9 @@ 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:  ``slic`` (:since:`Since 1.3.5 (QEMU)`
-   :since:`Since 5.9.0 (Xen)`, ``msdm``.
+   ``type`` attribute contains the ACPI table type:  ``slic`` (:since:`Since
+   1.3.5 (QEMU)` :since:`Since 5.9.0 (Xen)`, ``msdm`` (:since:`Since 11.1.0
+   (QEMU)`)
 
 
 SMBIOS System Information
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 416edd4a06..497a1a8382 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -339,8 +339,7 @@ libxlDomainDefValidate(const virDomainDef *def,
         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));
+                           virDomainOsACPITableTypeToString(def->os.acpiTables[i]->type));
             return -1;
 
         default:
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1153d8e095..485b82f853 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -130,7 +130,8 @@ VIR_ENUM_IMPL(qemuNumaPolicy,
 VIR_ENUM_DECL(qemuACPITableSIG);
 VIR_ENUM_IMPL(qemuACPITableSIG,
               VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST,
-              "SLIC");
+              "SLIC",
+              "MSDM");
 
 
 const char *
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 1389d4db6f..ba376f1279 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -750,8 +750,7 @@ qemuValidateDomainDefBoot(const virDomainDef *def,
         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));
+                           virDomainOsACPITableTypeToString(def->os.acpiTables[i]->type));
             return -1;
 
         default:


Michal