From: Andrea Righi Date: Sat, 6 Sep 2025 13:09:00 +0000 (+0200) Subject: qemu: Generate acpi-generic-initiator command from acpi nodeset X-Git-Tag: v11.8.0-rc1~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c247849335c68a9177d0ea49cdef248d7480626;p=thirdparty%2Flibvirt.git qemu: Generate acpi-generic-initiator command from acpi nodeset Reviewed-by: Daniel P. Berrangé Signed-off-by: Andrea Righi --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3f9b583985..031f09b7a5 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5222,6 +5222,43 @@ qemuBuildHostdevSCSICommandLine(virCommand *cmd, } +static int +qemuBuildAcpiNodesetProps(virCommand *cmd, + virDomainDeviceInfo *info) +{ + static unsigned int giIndex; + int node = -1; + + if (!info->acpiNodeset) + return 0; + + while ((node = virBitmapNextSetBit(info->acpiNodeset, node)) > -1) { + g_autoptr(virJSONValue) props = NULL; + g_autofree char *id = g_strdup_printf("gi%u", giIndex++); + + if (virJSONValueObjectAdd(&props, + "s:qom-type", "acpi-generic-initiator", + "s:id", id, + "s:pci-dev", info->alias, + "i:node", node, + NULL) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to build acpi-generic-initiator properties")); + + return -1; + } + + if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to build QEMU command line for acpi-generic-initiator")); + return -1; + } + } + + return 0; +} + + static int qemuBuildHostdevCommandLine(virCommand *cmd, const virDomainDef *def, @@ -5264,6 +5301,10 @@ qemuBuildHostdevCommandLine(virCommand *cmd, if (qemuBuildDeviceCommandlineFromJSON(cmd, devprops, def, qemuCaps) < 0) return -1; + + if (qemuBuildAcpiNodesetProps(cmd, hostdev->info) < 0) + return -1; + break; /* SCSI */