[PATCH v5 04/15] qemu_monitor: add features to CPU model for QMP command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx>
---
 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

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux