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