From nobody Thu Dec 18 00:40:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739902426933606.2335770372533; Tue, 18 Feb 2025 10:13:46 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 446981C34; Tue, 18 Feb 2025 13:13:46 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 021331789; Tue, 18 Feb 2025 13:13:05 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id A87EC1770; Tue, 18 Feb 2025 13:13:01 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C8C14176E for ; Tue, 18 Feb 2025 13:13:00 -0500 (EST) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-136-0EO0vObqM16Jyjk47LzL8A-1; Tue, 18 Feb 2025 13:12:59 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4F55C1800997 for ; Tue, 18 Feb 2025 18:12:58 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.158]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1B85D19560AF; Tue, 18 Feb 2025 18:12:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739902380; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/+6BULhsV/yybPSMaW7ws4dAHHeI4pANjak2+D2kQI0=; b=XxAvZqnPD0UVqtwyCSdqfDlJ5raR3Xn/lH8cEHjVQwiHPDJStZd2g7+Q4ehmuJ0l7MR9/a PSQeX62MkUIjPchluzcRFABUcF98n/i9wT447DJwZFc06KE7WoF702k6F5W9CzuvNZvnV6 sogRsWXUHEsQyNlpYfkR3pTyaIUEJrE= X-MC-Unique: 0EO0vObqM16Jyjk47LzL8A-1 X-Mimecast-MFC-AGG-ID: 0EO0vObqM16Jyjk47LzL8A_1739902378 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: devel@lists.libvirt.org Subject: [PATCH 1/4] conf: introduce support for multiple ACPI tables Date: Tue, 18 Feb 2025 18:12:50 +0000 Message-ID: <20250218181253.1632013-2-berrange@redhat.com> In-Reply-To: <20250218181253.1632013-1-berrange@redhat.com> References: <20250218181253.1632013-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 74a-d8bsepQLWCGPH8Il8Hv7oawpqUT8ggSdemU3Ooc_1739902378 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: TD4CARRLJGYVFSPE2LSXCQDJ2RNHQHWG X-Message-ID-Hash: TD4CARRLJGYVFSPE2LSXCQDJ2RNHQHWG X-MailFrom: berrange@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Victor Toso X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739902427980019000 Content-Type: text/plain; charset="utf-8" Currently we parse ...path...
into a flat 'char *slic_table' field which is rather an anti-pattern as it has special cased a single attribute type. This rewrites the internal design to permit multiple table types to be parsed, should we add more in future. Each type is permitted to only appear once. The Xen code is fairly dubious in its use of 'slic_table' to hold Xen's 'acpi_firmware' config option, as IIUC Xen's config is not limited to accepting a single table per file. It takes a concatenation of all data and ought to be represented as such. This is left for a future contributor to solve. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 87 +++++++++++++++++++++++++-------- src/conf/domain_conf.h | 21 +++++++- src/libxl/libxl_conf.c | 8 ++- src/libxl/xen_xl.c | 22 +++++++-- src/qemu/qemu_command.c | 13 +++-- src/security/security_dac.c | 18 ++++--- src/security/security_selinux.c | 16 +++--- src/security/virt-aa-helper.c | 5 +- 8 files changed, 143 insertions(+), 47 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 49555efc56..04fb893587 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1457,6 +1457,11 @@ VIR_ENUM_IMPL(virDomainOsDefFirmwareFeature, "secure-boot", ); =20 +VIR_ENUM_IMPL(virDomainOsACPITable, + VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST, + "slic", +); + VIR_ENUM_IMPL(virDomainCFPC, VIR_DOMAIN_CFPC_LAST, "none", @@ -3899,6 +3904,15 @@ virDomainSecDefFree(virDomainSecDef *def) g_free(def); } =20 +void virDomainOSACPITableDefFree(virDomainOSACPITableDef *def) +{ + if (!def) + return; + g_free(def->path); + g_free(def); +} + + static void virDomainOSDefClear(virDomainOSDef *os) { @@ -3924,7 +3938,9 @@ virDomainOSDefClear(virDomainOSDef *os) g_free(os->cmdline); g_free(os->dtb); g_free(os->root); - g_free(os->slic_table); + for (i =3D 0; i < os->nacpiTables; i++) + virDomainOSACPITableDefFree(os->acpiTables[i]); + g_free(os->acpiTables); virDomainLoaderDefFree(os->loader); g_free(os->bootloader); g_free(os->bootloaderArgs); @@ -17873,40 +17889,64 @@ virDomainDefParseBootAcpiOptions(virDomainDef *de= f, int n; g_autofree xmlNodePtr *nodes =3D NULL; g_autofree char *tmp =3D NULL; + size_t ntables =3D 0; + virDomainOSACPITableDef **tables =3D NULL; + size_t i; + size_t j; =20 if ((n =3D virXPathNodeSet("./os/acpi/table", ctxt, &nodes)) < 0) return -1; =20 - if (n > 1) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Only one acpi table is supported")); - return -1; - } - - if (n =3D=3D 1) { - tmp =3D virXMLPropString(nodes[0], "type"); + for (i =3D 0; i < n; i++) { + int type; + tmp =3D virXMLPropString(nodes[i], "type"); =20 if (!tmp) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing acpi table type")); - return -1; + goto error; } =20 - if (STREQ_NULLABLE(tmp, "slic")) { - VIR_FREE(tmp); - if (!(tmp =3D virXMLNodeContentString(nodes[0]))) - return -1; - - def->os.slic_table =3D virFileSanitizePath(tmp); - } else { + if ((type =3D virDomainOsACPITableTypeFromString(tmp)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("Unknown acpi table type: %1$s"), tmp); - return -1; + goto error; } + + for (j =3D 0; j < i; j++) { + if (tables[j]->type =3D=3D type) { + virReportError(VIR_ERR_XML_ERROR, + _("ACPI table type '%1$s' may only appear o= nce"), + tmp); + goto error; + } + } + + VIR_FREE(tmp); + if (!(tmp =3D virXMLNodeContentString(nodes[i]))) + goto error; + + tables =3D g_renew(virDomainOSACPITableDef *, tables, ntables + 1); + tables[ntables] =3D g_new0(virDomainOSACPITableDef, 1); + tables[ntables]->type =3D type; + tables[ntables]->path =3D virFileSanitizePath(tmp); + ntables++; + + VIR_FREE(tmp); } =20 + def->os.nacpiTables =3D ntables; + def->os.acpiTables =3D tables; + return 0; + + error: + for (i =3D 0; i < ntables; i++) { + virDomainOSACPITableDefFree(tables[i]); + } + g_free(tables); + return -1; } =20 =20 @@ -28490,11 +28530,16 @@ virDomainDefFormatInternalSetRootName(virDomainDe= f *def, def->os.dtb); virBufferEscapeString(buf, "%s\n", def->os.root); - if (def->os.slic_table) { + + if (def->os.nacpiTables) { virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); - virBufferEscapeString(buf, "%s
\n", - def->os.slic_table); + for (i =3D 0; i < def->os.nacpiTables; i++) { + virBufferAsprintf(buf, "", + virDomainOsACPITableTypeToString(def->os.acp= iTables[i]->type)); + virBufferEscapeString(buf, "%s
\n", + def->os.acpiTables[i]->path); + } virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "
\n"); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9da6586e66..7735cce325 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2474,6 +2474,24 @@ typedef enum { =20 VIR_ENUM_DECL(virDomainOsDefFirmwareFeature); =20 +typedef enum { + VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC, + + VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST +} virDomainOsACPITable; + +VIR_ENUM_DECL(virDomainOsACPITable); + +struct _virDomainOSACPITableDef { + int type; + char *path; +}; + +typedef struct _virDomainOSACPITableDef virDomainOSACPITableDef; +void virDomainOSACPITableDefFree(virDomainOSACPITableDef *def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainOSACPITableDef, virDomainOSACPITabl= eDefFree); + + struct _virDomainOSDef { int type; virDomainOsDefFirmware firmware; @@ -2496,7 +2514,8 @@ struct _virDomainOSDef { char *cmdline; char *dtb; char *root; - char *slic_table; + size_t nacpiTables; + virDomainOSACPITableDef **acpiTables; virDomainLoaderDef *loader; char *bootloader; char *bootloaderArgs; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index c404226e43..7fa1decd67 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -583,7 +583,13 @@ libxlMakeDomBuildInfo(virDomainDef *def, #endif =20 /* copy SLIC table path to acpi_firmware */ - b_info->u.hvm.acpi_firmware =3D g_strdup(def->os.slic_table); + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (def->os.acpiTables[i]->type !=3D VIR_DOMAIN_OS_ACPI_TABLE_= TYPE_SLIC) + continue; + + b_info->u.hvm.acpi_firmware =3D g_strdup(def->os.acpiTables[i]= ->path); + break; + } =20 if (def->nsounds > 0) { /* diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index 53f6871efc..a9f41f9ee2 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -106,6 +106,7 @@ xenParseXLOS(virConf *conf, virDomainDef *def, virCaps = *caps) g_autofree char *bios =3D NULL; g_autofree char *bios_path =3D NULL; g_autofree char *boot =3D NULL; + g_autofree char *slic =3D NULL; int val =3D 0; =20 if (xenConfigGetString(conf, "bios", &bios, NULL) < 0) @@ -133,8 +134,15 @@ xenParseXLOS(virConf *conf, virDomainDef *def, virCaps= *caps) } } =20 - if (xenConfigCopyStringOpt(conf, "acpi_firmware", &def->os.slic_ta= ble) < 0) + if (xenConfigCopyStringOpt(conf, "acpi_firmware", &slic) < 0) return -1; + if (slic !=3D NULL) { + def->os.nacpiTables =3D 1; + def->os.acpiTables =3D g_new0(virDomainOSACPITableDef *, 1); + def->os.acpiTables[0] =3D g_new0(virDomainOSACPITableDef, 1); + def->os.acpiTables[0]->type =3D VIR_DOMAIN_OS_ACPI_TABLE_TYPE_= SLIC; + def->os.acpiTables[0]->path =3D g_steal_pointer(&slic); + } =20 if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) return -1; @@ -1134,9 +1142,15 @@ xenFormatXLOS(virConf *conf, virDomainDef *def) return -1; } =20 - if (def->os.slic_table && - xenConfigSetString(conf, "acpi_firmware", def->os.slic_table) = < 0) - return -1; + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (def->os.acpiTables[i]->type !=3D VIR_DOMAIN_OS_ACPI_TABLE_= TYPE_SLIC) + continue; + + if (xenConfigSetString(conf, "acpi_firmware", + def->os.acpiTables[i]->path) < 0) + return -1; + break; + } =20 if (def->os.kernel && xenConfigSetString(conf, "kernel", def->os.kernel) < 0) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 54130ac4f0..1153d8e095 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -127,6 +127,11 @@ VIR_ENUM_IMPL(qemuNumaPolicy, "restrictive", ); =20 +VIR_ENUM_DECL(qemuACPITableSIG); +VIR_ENUM_IMPL(qemuACPITableSIG, + VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST, + "SLIC"); + =20 const char * qemuAudioDriverTypeToString(virDomainAudioType type) @@ -5995,6 +6000,7 @@ qemuBuildBootCommandLine(virCommand *cmd, { g_auto(virBuffer) boot_buf =3D VIR_BUFFER_INITIALIZER; g_autofree char *boot_opts_str =3D NULL; + size_t i; =20 if (def->os.bootmenu) { if (def->os.bootmenu =3D=3D VIR_TRISTATE_BOOL_YES) @@ -6028,11 +6034,12 @@ qemuBuildBootCommandLine(virCommand *cmd, virCommandAddArgList(cmd, "-append", def->os.cmdline, NULL); if (def->os.dtb) virCommandAddArgList(cmd, "-dtb", def->os.dtb, NULL); - if (def->os.slic_table) { + for (i =3D 0; i < def->os.nacpiTables; i++) { g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; virCommandAddArg(cmd, "-acpitable"); - virBufferAddLit(&buf, "sig=3DSLIC,file=3D"); - virQEMUBuildBufferEscapeComma(&buf, def->os.slic_table); + virBufferAsprintf(&buf, "sig=3D%s,file=3D", + qemuACPITableSIGTypeToString(def->os.acpiTables[= i]->type)); + virQEMUBuildBufferEscapeComma(&buf, def->os.acpiTables[i]->path); virCommandAddArgBuffer(cmd, &buf); } =20 diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 0505f4e4a3..b4d61bc576 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -2050,9 +2050,10 @@ virSecurityDACRestoreAllLabel(virSecurityManager *mg= r, virSecurityDACRestoreFileLabel(mgr, def->os.dtb) < 0) rc =3D -1; =20 - if (def->os.slic_table && - virSecurityDACRestoreFileLabel(mgr, def->os.slic_table) < 0) - rc =3D -1; + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (virSecurityDACRestoreFileLabel(mgr, def->os.acpiTables[i]->pat= h) < 0) + rc =3D -1; + } =20 if (def->pstore && virSecurityDACRestoreFileLabel(mgr, def->pstore->path) < 0) @@ -2300,11 +2301,12 @@ virSecurityDACSetAllLabel(virSecurityManager *mgr, user, group, true) < 0) return -1; =20 - if (def->os.slic_table && - virSecurityDACSetOwnership(mgr, NULL, - def->os.slic_table, - user, group, true) < 0) - return -1; + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (virSecurityDACSetOwnership(mgr, NULL, + def->os.acpiTables[i]->path, + user, group, true) < 0) + return -1; + } =20 if (def->pstore && virSecurityDACSetOwnership(mgr, NULL, diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index cdc32d9b34..b8659e33d6 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -3013,9 +3013,10 @@ virSecuritySELinuxRestoreAllLabel(virSecurityManager= *mgr, virSecuritySELinuxRestoreFileLabel(mgr, def->os.dtb, true) < 0) rc =3D -1; =20 - if (def->os.slic_table && - virSecuritySELinuxRestoreFileLabel(mgr, def->os.slic_table, true) = < 0) - rc =3D -1; + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (virSecuritySELinuxRestoreFileLabel(mgr, def->os.acpiTables[i]-= >path, true) < 0) + rc =3D -1; + } =20 if (def->pstore && virSecuritySELinuxRestoreFileLabel(mgr, def->pstore->path, true) <= 0) @@ -3443,10 +3444,11 @@ virSecuritySELinuxSetAllLabel(virSecurityManager *m= gr, data->content_context, true) < 0) return -1; =20 - if (def->os.slic_table && - virSecuritySELinuxSetFilecon(mgr, def->os.slic_table, - data->content_context, true) < 0) - return -1; + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (virSecuritySELinuxSetFilecon(mgr, def->os.acpiTables[i]->path, + data->content_context, true) < 0) + return -1; + } =20 if (def->pstore && virSecuritySELinuxSetFilecon(mgr, def->pstore->path, diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 1626d5a89c..939478a625 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -974,9 +974,10 @@ get_files(vahControl * ctl) if (vah_add_file(&buf, ctl->def->os.dtb, "r") !=3D 0) goto cleanup; =20 - if (ctl->def->os.slic_table) - if (vah_add_file(&buf, ctl->def->os.slic_table, "r") !=3D 0) + for (i =3D 0; i < def->os.nacpiTables; i++) { + if (vah_add_file(&buf, ctl->def->os.acpiTables[i]->path, "r") !=3D= 0) goto cleanup; + } =20 if (ctl->def->pstore) if (vah_add_file(&buf, ctl->def->pstore->path, "rw") !=3D 0) --=20 2.47.1 From nobody Thu Dec 18 00:40:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739902450704195.1289941241091; Tue, 18 Feb 2025 10:14:10 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 2EDE21BA8; Tue, 18 Feb 2025 13:14:09 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 238AE1BE9; Tue, 18 Feb 2025 13:13:07 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id E793C1770; Tue, 18 Feb 2025 13:13:02 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6C3A2176E for ; Tue, 18 Feb 2025 13:13:02 -0500 (EST) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-519-THpUTKumPCSsaLPOBvpQ6Q-1; Tue, 18 Feb 2025 13:13:00 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E018B18D95EA for ; Tue, 18 Feb 2025 18:12:59 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.158]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BE60719560AF; Tue, 18 Feb 2025 18:12:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739902382; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7x7f3cliUiTuVE8qLN8vTkUAfrQ0+elIhXjD6pZhF4o=; b=eNCUCfkAgcH/sImrCcovr9nvQNXGoyWLfKLRXZZ5KstulyhWWQyIrILEioKZxSH9rZlOXe ux21XFsoKyaIapcX3874RgDDmApQZYUHXocFoET+2VLZk+pMFn+CZW/NQuS3u+23Dm/xLf 8u4TuPWmBae0DXgKrOxyW82bLiKnW3s= X-MC-Unique: THpUTKumPCSsaLPOBvpQ6Q-1 X-Mimecast-MFC-AGG-ID: THpUTKumPCSsaLPOBvpQ6Q_1739902380 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: devel@lists.libvirt.org Subject: [PATCH 2/4] src: validate permitted ACPI table types in libxl/qemu drivers Date: Tue, 18 Feb 2025 18:12:51 +0000 Message-ID: <20250218181253.1632013-3-berrange@redhat.com> In-Reply-To: <20250218181253.1632013-1-berrange@redhat.com> References: <20250218181253.1632013-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: fuO4qZ2dJi2JVB1cNuL2hMCC4iGyIMOh3dfU1bFxOY8_1739902380 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VH3F5VK3JR6DAJ7X75SVIHTBZ6ACAIIY X-Message-ID-Hash: VH3F5VK3JR6DAJ7X75SVIHTBZ6ACAIIY X-MailFrom: berrange@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Victor Toso X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739902451530019100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/libxl/libxl_domain.c | 14 ++++++++++++++ src/qemu/qemu_validate.c | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 6805160923..816ed2f349 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -306,6 +306,7 @@ libxlDomainDefValidate(const virDomainDef *def, libxlDriverPrivate *driver =3D opaque; g_autoptr(libxlDriverConfig) cfg =3D libxlDriverConfigGet(driver); bool reqSecureBoot =3D false; + size_t i; =20 if (!virCapabilitiesDomainSupported(cfg->caps, def->os.type, def->os.arch, @@ -330,6 +331,19 @@ libxlDomainDefValidate(const virDomainDef *def, return -1; } =20 + for (i =3D 0; i < def->os.nacpiTables; i++) { + switch ((virDomainOsACPITable)def->os.acpiTables[i]->type) { + case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC: + break; + + default: + case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST: + virReportEnumRangeError(virDomainOsACPITable, + def->os.acpiTables[i]->type); + return -1; + } + } + if (def->nsounds > 0) { virDomainSoundDef *snd =3D def->sounds[0]; =20 diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 3e3e368da3..039f5f84e6 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -701,6 +701,8 @@ static int qemuValidateDomainDefBoot(const virDomainDef *def, virQEMUCaps *qemuCaps) { + size_t i; + if (def->os.bootloader || def->os.bootloaderArgs) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("bootloader is not supported by QEMU")); @@ -740,6 +742,19 @@ qemuValidateDomainDefBoot(const virDomainDef *def, return -1; } =20 + for (i =3D 0; i < def->os.nacpiTables; i++) { + switch ((virDomainOsACPITable)def->os.acpiTables[i]->type) { + case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC: + break; + + default: + case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST: + virReportEnumRangeError(virDomainOsACPITable, + def->os.acpiTables[i]->type); + return -1; + } + } + return 0; } =20 --=20 2.47.1 From nobody Thu Dec 18 00:40:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739902501600832.3621884883416; Tue, 18 Feb 2025 10:15:01 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 03FD51B9C; Tue, 18 Feb 2025 13:15:00 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 983951A39; Tue, 18 Feb 2025 13:13:38 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 24F811A40; Tue, 18 Feb 2025 13:13:34 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 534441BF6 for ; Tue, 18 Feb 2025 13:13:06 -0500 (EST) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-526-PzjvBE4TMj2bgrs83b9bYQ-1; Tue, 18 Feb 2025 13:13:02 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DB7ED1800570 for ; Tue, 18 Feb 2025 18:13:01 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.158]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6AF8119560AF; Tue, 18 Feb 2025 18:13:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739902386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4AAOSzqzVkZ1vvYgKgybUFUs2FPv/LFT5NaJ45hldSA=; b=Mji7kwkcr1LVj4fDyJgxbuNmAVuNMpyXhXXFaMj9NuZmxEtioFpl+RQnrfdvF9gK41jkXG S4owengVrfcaanBlbTlZ+zR/eBo3bvFAS9v14rFvaA0CZT3nwUnudcIzheFV+BTA9bDN7/ MMXipJBtz6MD2J3ZNilbidCw/fb3Lq0= X-MC-Unique: PzjvBE4TMj2bgrs83b9bYQ-1 X-Mimecast-MFC-AGG-ID: PzjvBE4TMj2bgrs83b9bYQ_1739902382 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: devel@lists.libvirt.org Subject: [PATCH 3/4] conf: support MSDM ACPI table type Date: Tue, 18 Feb 2025 18:12:52 +0000 Message-ID: <20250218181253.1632013-4-berrange@redhat.com> In-Reply-To: <20250218181253.1632013-1-berrange@redhat.com> References: <20250218181253.1632013-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: _86tRl4SV7L6O7WcwVMjrvStrXxlvEebMPVkZrmneEQ_1739902382 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LNSJ32CZRQTETSCARTTW7AKFJGJZX3DS X-Message-ID-Hash: LNSJ32CZRQTETSCARTTW7AKFJGJZX3DS X-MailFrom: berrange@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Victor Toso X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739902502113019000 Content-Type: text/plain; charset="utf-8" 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= gn/dn653305(v=3Dvs.85) Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- 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. =20 ``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:`Sin= ce 1.3.5 (QEMU)` + :since:`Since 5.9.0 (Xen)`, ``msdm``. =20 =20 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", ); =20 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); =20 typedef enum { VIR_DOMAIN_OS_ACPI_TABLE_TYPE_SLIC, + VIR_DOMAIN_OS_ACPI_TABLE_TYPE_MSDM, =20 VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST } virDomainOsACPITable; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 3328a63205..9bae953295 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -7191,7 +7191,10 @@ - slic + + slic + msdm + 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; =20 + 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; =20 + 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, --=20 2.47.1 From nobody Thu Dec 18 00:40:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739902530218593.8721583736219; Tue, 18 Feb 2025 10:15:30 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 9BDC91A9C; Tue, 18 Feb 2025 13:15:29 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B54DD1B53; Tue, 18 Feb 2025 13:13:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 0CD451AC4; Tue, 18 Feb 2025 13:13:37 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4EACE1C03 for ; Tue, 18 Feb 2025 13:13:07 -0500 (EST) Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-657-LkFzHaXhOPCD3PCJny9AWQ-1; Tue, 18 Feb 2025 13:13:05 -0500 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B499918EAB3A for ; Tue, 18 Feb 2025 18:13:03 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.158]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8112F194129B; Tue, 18 Feb 2025 18:13:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739902386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GnjPttb49rrav1TWuW33lD1coolXS27ElS5lAaRD+3M=; b=dcRiZYDkNgNj8AQUfEro2IVzg446JHqXYUdin7xXjMeEHxH4wVgwo8EfVFSodS1VewCSm1 dOCqMnkSuaqtBvtcgFjwDWeDFZrqveaVBhXp7CPWUtv83+xXjqW6j7hIhew/YPUJcpd2Za xkIq06jXkURIDSmIMugwxwpQrkR/yck= X-MC-Unique: LkFzHaXhOPCD3PCJny9AWQ-1 X-Mimecast-MFC-AGG-ID: LkFzHaXhOPCD3PCJny9AWQ_1739902383 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: devel@lists.libvirt.org Subject: [PATCH 4/4] qemu: support MSDM ACPI table type Date: Tue, 18 Feb 2025 18:12:53 +0000 Message-ID: <20250218181253.1632013-5-berrange@redhat.com> In-Reply-To: <20250218181253.1632013-1-berrange@redhat.com> References: <20250218181253.1632013-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: JynUn9qcgL3vjh_rFNYiquFwlPNoPBcwkxgaHQ9ZwVA_1739902383 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KPZGQEP2AG6VIFXZE4LSJFANWXXMJ2ER X-Message-ID-Hash: KPZGQEP2AG6VIFXZE4LSJFANWXXMJ2ER X-MailFrom: berrange@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Victor Toso X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739902532261019000 Content-Type: text/plain; charset="utf-8" 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= gn/dn653305(v=3Dvs.85) Resolves: https://gitlab.com/libvirt/libvirt/-/issues/748 Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/qemu/qemu_command.c | 3 +- src/qemu/qemu_validate.c | 8 +--- .../acpi-table-many.x86_64-latest.args | 34 ++++++++++++++++ .../acpi-table-many.x86_64-latest.xml | 39 +++++++++++++++++++ tests/qemuxmlconfdata/acpi-table-many.xml | 31 +++++++++++++++ tests/qemuxmlconftest.c | 1 + 6 files changed, 108 insertions(+), 8 deletions(-) create mode 100644 tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/acpi-table-many.xml 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"); =20 =20 const char * diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 0b3efcd700..42f9b14f25 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -745,14 +745,8 @@ qemuValidateDomainDefBoot(const virDomainDef *def, for (i =3D 0; i < def->os.nacpiTables; i++) { switch ((virDomainOsACPITable)def->os.acpiTables[i]->type) { 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; + break; =20 default: case VIR_DOMAIN_OS_ACPI_TABLE_TYPE_LAST: diff --git a/tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.args b/tes= ts/qemuxmlconfdata/acpi-table-many.x86_64-latest.args new file mode 100644 index 0000000000..a4d4f4b53d --- /dev/null +++ b/tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.args @@ -0,0 +1,34 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3DQEMUGuest1,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Don \ +-accel tcg \ +-cpu qemu64 \ +-m size=3D219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}'= \ +-overcommit mem-lock=3Doff \ +-smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D1729,server=3Don,wait=3Doff \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot strict=3Don \ +-acpitable sig=3DSLIC,file=3D/var/lib/libvirt/acpi/slic.dat \ +-acpitable sig=3DMSDM,file=3D/var/lib/libvirt/acpi/msdm.dat \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0= x2"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.xml b/test= s/qemuxmlconfdata/acpi-table-many.x86_64-latest.xml new file mode 100644 index 0000000000..7d42e377c9 --- /dev/null +++ b/tests/qemuxmlconfdata/acpi-table-many.x86_64-latest.xml @@ -0,0 +1,39 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + /var/lib/libvirt/acpi/slic.dat
+ /var/lib/libvirt/acpi/msdm.dat
+
+ +
+ + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + +
+ + +
+ + + + +