diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 793fd351ca..fdb45f6bca 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -704,6 +704,7 @@ struct _virQEMUCapsMachineType { bool numaMemSupported; char *defaultRAMid; bool deprecated; + virTristateBool acpi; }; typedef struct _virQEMUCapsHostCPUData virQEMUCapsHostCPUData; @@ -1964,6 +1965,7 @@ virQEMUCapsAccelCopyMachineTypes(virQEMUCapsAccel *dst, dst->machineTypes[i].numaMemSupported = src->machineTypes[i].numaMemSupported; dst->machineTypes[i].defaultRAMid = g_strdup(src->machineTypes[i].defaultRAMid); dst->machineTypes[i].deprecated = src->machineTypes[i].deprecated; + dst->machineTypes[i].acpi = src->machineTypes[i].acpi; } } @@ -2783,7 +2785,8 @@ virQEMUCapsAddMachine(virQEMUCaps *qemuCaps, bool isDefault, bool numaMemSupported, const char *defaultRAMid, - bool deprecated) + bool deprecated, + virTristateBool acpi) { virQEMUCapsAccel *accel = virQEMUCapsGetAccel(qemuCaps, virtType); virQEMUCapsMachineType *mach; @@ -2807,6 +2810,7 @@ virQEMUCapsAddMachine(virQEMUCaps *qemuCaps, mach->defaultRAMid = g_strdup(defaultRAMid); mach->deprecated = deprecated; + mach->acpi = acpi; } /** @@ -2857,7 +2861,8 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCaps *qemuCaps, machines[i]->isDefault, machines[i]->numaMemSupported, machines[i]->defaultRAMid, - machines[i]->deprecated); + machines[i]->deprecated, + machines[i]->acpi); if (preferredMachine && (STREQ_NULLABLE(machines[i]->alias, preferredMachine) || @@ -4214,6 +4219,9 @@ virQEMUCapsLoadMachines(virQEMUCapsAccel *caps, return -1; virTristateBoolToBool(tmp, &caps->machineTypes[i].deprecated); + + if (virXMLPropTristateBool(nodes[i], "acpi", VIR_XML_PROP_NONE, &caps->machineTypes[i].acpi) < 0) + return -1; } return 0; @@ -4907,6 +4915,11 @@ virQEMUCapsFormatMachines(virQEMUCapsAccel *caps, caps->machineTypes[i].defaultRAMid); if (caps->machineTypes[i].deprecated) virBufferAddLit(buf, " deprecated='yes'"); + + if (caps->machineTypes[i].acpi != VIR_TRISTATE_BOOL_ABSENT) + virBufferAsprintf(buf, " acpi='%s'", + virTristateBoolTypeToString(caps->machineTypes[i].acpi)); + virBufferAddLit(buf, "/>\n"); } } @@ -6943,7 +6956,7 @@ virQEMUCapsStripMachineAliasesForVirtType(virQEMUCaps *qemuCaps, virQEMUCapsAddMachine(qemuCaps, virtType, name, NULL, mach->defaultCPU, mach->maxCpus, mach->hotplugCpus, mach->qemuDefault, mach->numaMemSupported, mach->defaultRAMid, - mach->deprecated); + mach->deprecated, mach->acpi); } } } diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 87368536ea..720435f762 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -117,4 +117,5 @@ virQEMUCapsAddMachine(virQEMUCaps *qemuCaps, bool isDefault, bool numaMemSupported, const char *defaultRAMid, - bool deprecated); + bool deprecated, + virTristateBool acpi); diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 2fa06b99a3..72db0c0838 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1082,6 +1082,7 @@ struct _qemuMonitorMachineInfo { bool numaMemSupported; char *defaultRAMid; bool deprecated; + virTristateBool acpi; }; int qemuMonitorGetMachines(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 2fe3f696c8..ee2ea68acb 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4822,6 +4822,18 @@ int qemuMonitorJSONGetMachines(qemuMonitor *mon, if (virJSONValueObjectHasKey(child, "deprecated") && virJSONValueObjectGetBoolean(child, "deprecated", &info->deprecated) < 0) goto cleanup; + + if (virJSONValueObjectHasKey(child, "acpi")) { + bool acpi; + + if (virJSONValueObjectGetBoolean(child, "acpi", &acpi) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("qemu-machines reply has malformed 'acpi data")); + goto cleanup; + } + + info->acpi = virTristateBoolFromBool(acpi); + } } ret = n; diff --git a/tests/qemucapabilitiesdata/caps_8.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0.x86_64.xml index 34ab392451..ee69898a54 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0.x86_64.xml @@ -1589,66 +1589,66 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3384,66 +3384,66 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 396803c40b..e47e93e8a6 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -458,7 +458,8 @@ qemuTestCapsPopulateFakeMachines(virQEMUCaps *caps, false, true, defaultRAMid, - false); + false, + VIR_TRISTATE_BOOL_ABSENT); virQEMUCapsSet(caps, QEMU_CAPS_TCG); } @@ -475,7 +476,8 @@ qemuTestCapsPopulateFakeMachines(virQEMUCaps *caps, false, true, defaultRAMid, - false); + false, + VIR_TRISTATE_BOOL_ABSENT); virQEMUCapsSet(caps, QEMU_CAPS_KVM); } } @@ -494,7 +496,8 @@ qemuTestCapsPopulateFakeMachines(virQEMUCaps *caps, false, true, defaultRAMid, - false); + false, + VIR_TRISTATE_BOOL_ABSENT); virQEMUCapsSet(caps, QEMU_CAPS_HVF); } }