Pablo Greco e6a3ae
From 2adf144c57ddef54f5c42cdbc539d0249ce1b0ba Mon Sep 17 00:00:00 2001
Pablo Greco e6a3ae
From: Eduardo Habkost <ehabkost@redhat.com>
Pablo Greco e6a3ae
Date: Thu, 29 Aug 2019 20:55:32 +0100
Pablo Greco e6a3ae
Subject: [PATCH 05/10] i386: "unavailable-features" QOM property
Pablo Greco e6a3ae
Pablo Greco e6a3ae
RH-Author: Eduardo Habkost <ehabkost@redhat.com>
Pablo Greco e6a3ae
Message-id: <20190829205532.8302-3-ehabkost@redhat.com>
Pablo Greco e6a3ae
Patchwork-id: 90201
Pablo Greco e6a3ae
O-Subject: [RHEL-8.1.0 qemu-kvm PATCH 2/2] i386: "unavailable-features" QOM property
Pablo Greco e6a3ae
Bugzilla: 1747185
Pablo Greco e6a3ae
RH-Acked-by: Thomas Huth <thuth@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Add a "unavailable-features" QOM property to X86CPU objects that
Pablo Greco e6a3ae
have the same semantics of "unavailable-features" on
Pablo Greco e6a3ae
query-cpu-definitions.  The new property has the same goal of
Pablo Greco e6a3ae
"filtered-features", but is generic enough to let any kind of CPU
Pablo Greco e6a3ae
feature to be listed there without relying on low level details
Pablo Greco e6a3ae
like CPUID leaves or MSR numbers.
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Message-Id: <20190422234742.15780-3-ehabkost@redhat.com>
Pablo Greco e6a3ae
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Pablo Greco e6a3ae
(cherry picked from commit 506174bf8219dc6d56d2b1f7e66e8cf39157466f)
Pablo Greco e6a3ae
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Pablo Greco e6a3ae
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
Pablo Greco e6a3ae
---
Pablo Greco e6a3ae
 target/i386/cpu.c | 20 ++++++++++++++++++++
Pablo Greco e6a3ae
 1 file changed, 20 insertions(+)
Pablo Greco e6a3ae
Pablo Greco e6a3ae
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
Pablo Greco e6a3ae
index 934f11b..c8f50a7 100644
Pablo Greco e6a3ae
--- a/target/i386/cpu.c
Pablo Greco e6a3ae
+++ b/target/i386/cpu.c
Pablo Greco e6a3ae
@@ -3580,6 +3580,17 @@ static void x86_cpu_list_feature_names(FeatureWordArray features,
Pablo Greco e6a3ae
     }
Pablo Greco e6a3ae
 }
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
+static void x86_cpu_get_unavailable_features(Object *obj, Visitor *v,
Pablo Greco e6a3ae
+                                             const char *name, void *opaque,
Pablo Greco e6a3ae
+                                             Error **errp)
Pablo Greco e6a3ae
+{
Pablo Greco e6a3ae
+    X86CPU *xc = X86_CPU(obj);
Pablo Greco e6a3ae
+    strList *result = NULL;
Pablo Greco e6a3ae
+
Pablo Greco e6a3ae
+    x86_cpu_list_feature_names(xc->filtered_features, &result);
Pablo Greco e6a3ae
+    visit_type_strList(v, "unavailable-features", &result, errp);
Pablo Greco e6a3ae
+}
Pablo Greco e6a3ae
+
Pablo Greco e6a3ae
 /* Check for missing features that may prevent the CPU class from
Pablo Greco e6a3ae
  * running using the current machine and accelerator.
Pablo Greco e6a3ae
  */
Pablo Greco e6a3ae
@@ -5479,6 +5490,15 @@ static void x86_cpu_initfn(Object *obj)
Pablo Greco e6a3ae
     object_property_add(obj, "filtered-features", "X86CPUFeatureWordInfo",
Pablo Greco e6a3ae
                         x86_cpu_get_feature_words,
Pablo Greco e6a3ae
                         NULL, NULL, (void *)cpu->filtered_features, NULL);
Pablo Greco e6a3ae
+    /*
Pablo Greco e6a3ae
+     * The "unavailable-features" property has the same semantics as
Pablo Greco e6a3ae
+     * CpuDefinitionInfo.unavailable-features on the "query-cpu-definitions"
Pablo Greco e6a3ae
+     * QMP command: they list the features that would have prevented the
Pablo Greco e6a3ae
+     * CPU from running if the "enforce" flag was set.
Pablo Greco e6a3ae
+     */
Pablo Greco e6a3ae
+    object_property_add(obj, "unavailable-features", "strList",
Pablo Greco e6a3ae
+                        x86_cpu_get_unavailable_features,
Pablo Greco e6a3ae
+                        NULL, NULL, NULL, &error_abort);
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
     object_property_add(obj, "crash-information", "GuestPanicInformation",
Pablo Greco e6a3ae
                         x86_cpu_get_crash_info_qom, NULL, NULL, NULL, NULL);
Pablo Greco e6a3ae
-- 
Pablo Greco e6a3ae
1.8.3.1
Pablo Greco e6a3ae