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

2019-10-02 Thread Jiri Denemark
On Thu, Sep 19, 2019 at 16:24:55 -0400, Collin Walling wrote:
> 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 
> ---
>  src/qemu/qemu_monitor_json.c | 30 +-
>  1 file changed, 25 insertions(+), 5 deletions(-)

Reviewed-by: Jiri Denemark 

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


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

2019-09-19 Thread Collin Walling
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 
---
 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@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list