query-cpu-model-baseline/comparison will accept a list of features
as part of the command. Since CPUs may be defined with CPU feature
policies, let's parse it to the appropriate boolean that the QMP
command expects.
A feature that is set to required, force, or if it is a hypervisor
CPU feature (-1), then set the property value to true. Otherwise
(optional, disabled) set the value to false.
Signed-off-by: Collin Walling <walling(a)linux.ibm.com>
---
src/qemu/qemu_monitor_json.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 3c6c330..77113c0 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -5787,6 +5787,7 @@ qemuMonitorJSONMakeCPUModel(virCPUDefPtr cpu,
{
virJSONValuePtr model = NULL;
virJSONValuePtr props = NULL;
+ size_t i;
if (!(model = virJSONValueNewObject()))
goto error;
@@ -5794,12 +5795,31 @@ qemuMonitorJSONMakeCPUModel(virCPUDefPtr cpu,
if (virJSONValueObjectAppendString(model, "name", cpu->model) < 0)
goto error;
- if (!migratable) {
- if (!(props = virJSONValueNewObject()) ||
- virJSONValueObjectAppendBoolean(props, "migratable", false) < 0
||
- virJSONValueObjectAppend(model, "props", props) < 0)
+ if (cpu->nfeatures || !migratable) {
+ if (!(props = virJSONValueNewObject()))
+ goto error;
+
+ for (i = 0; i < cpu->nfeatures; i++) {
+ char *name = cpu->features[i].name;
+ bool enabled = false;
+
+ /* policy may be reported as -1 if the CPU def is a host model */
+ if (cpu->features[i].policy == VIR_CPU_FEATURE_REQUIRE ||
+ cpu->features[i].policy == VIR_CPU_FEATURE_FORCE ||
+ cpu->features[i].policy == -1)
+ enabled = true;
+
+ if (virJSONValueObjectAppendBoolean(props, name, enabled) < 0)
+ goto error;
+ }
+
+ if (!migratable &&
+ virJSONValueObjectAppendBoolean(props, "migratable", false) < 0)
{
+ goto error;
+ }
+
+ if (virJSONValueObjectAppend(model, "props", props) < 0)
goto error;
- props = NULL;
}
return model;
--
2.7.4