qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] i386: Support "-cpu host" on TCG too


From: David Hildenbrand
Subject: Re: [Qemu-devel] [PATCH] i386: Support "-cpu host" on TCG too
Date: Tue, 17 Jan 2017 18:43:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0

Am 16.01.2017 um 20:54 schrieb Eduardo Habkost:
Change the meaning of "-cpu host" to "enable all features
supported by the accelerator in the current host", so that it can
be used to enable/query all features supported by TCG.

To make sure "host" is still at the end of the list in "-cpu
help", add a "ordering" field that will be used when sorting the
CPU model list.

Cc: Richard Henderson <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>

I also had the same thing in mind when working on s390x models but
decided to do it like x86. Now that x86 changes ...

Something like that should work for s390x (and I don't think it will break any concept). Most probably cleaner to handle this the same
way on all architectures and to not disable tests for s390x.

Uncompiled and untested.

@Conny and Christian, feel free to pick up and modify if this makes
sense

From 4a2af1ca47421b68eb7677cd91af350dd9be4e0e Mon Sep 17 00:00:00 2001
From: David Hildenbrand <address@hidden>
Date: Tue, 17 Jan 2017 18:34:45 +0100
Subject: [PATCH] s390x/cpumodel: allow the "host" model also for tcg

Let's also allow the host model for tcg, therefore meaning
"enable all features supported by the selected accelerator in the current
host".

Signed-off-by: David Hildenbrand <address@hidden>
---
 qapi-schema.json          |  4 ++--
 target/s390x/cpu-qom.h    |  1 -
 target/s390x/cpu_models.c | 34 ++++++++--------------------------
 3 files changed, 10 insertions(+), 29 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index ddc8783..f14d343 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -4334,8 +4334,8 @@
 # CPU model has to be created by baselining.
 #
 # Usually, a CPU model is compared against the maximum possible CPU model
-# of a certain configuration (e.g. the "host" model for KVM). If that CPU
-# model is identical or a subset, it will run in that configuration.
+# of a certain configuration (the "host" model). If that CPU model is
+# identical or a subset, it will run in that configuration.
 #
 # The result returned by this command may be affected by:
 #
diff --git a/target/s390x/cpu-qom.h b/target/s390x/cpu-qom.h
index 4e936e7..71322a5 100644
--- a/target/s390x/cpu-qom.h
+++ b/target/s390x/cpu-qom.h
@@ -47,7 +47,6 @@ typedef struct S390CPUClass {
     CPUClass parent_class;
     /*< public >*/
     const S390CPUDef *cpu_def;
-    bool kvm_required;
     bool is_static;
     bool is_migration_safe;
     const char *desc;
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index 5b66d33..2994a7b 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -331,10 +331,6 @@ static void cpu_model_from_info(S390CPUModel *model, const CpuModelInfo *info, error_setg(errp, "The CPU definition \'%s\' is unknown.", info->name);
         return;
     }
-    if (S390_CPU_CLASS(oc)->kvm_required && !kvm_enabled()) {
- error_setg(errp, "The CPU definition '%s' requires KVM", info->name);
-        return;
-    }
     obj = object_new(object_class_get_name(oc));
     cpu = S390_CPU(obj);

@@ -718,15 +714,9 @@ static inline void apply_cpu_model(const S390CPUModel *model, Error **errp)

 void s390_realize_cpu_model(CPUState *cs, Error **errp)
 {
-    S390CPUClass *xcc = S390_CPU_GET_CLASS(cs);
     S390CPU *cpu = S390_CPU(cs);
     const S390CPUModel *max_model;

-    if (xcc->kvm_required && !kvm_enabled()) {
-        error_setg(errp, "CPU definition requires KVM");
-        return;
-    }
-
     if (!cpu->model) {
         /* no host model support -> perform compatibility stuff */
         apply_cpu_model(NULL, errp);
@@ -904,26 +894,25 @@ static void s390_cpu_model_initfn(Object *obj)
     }
 }

-#ifdef CONFIG_KVM
 static void s390_host_cpu_model_initfn(Object *obj)
 {
+    S390CPUModel *max_model;
     S390CPU *cpu = S390_CPU(obj);
     Error *err = NULL;

-    if (!kvm_enabled() || !kvm_s390_cpu_models_supported()) {
+    if (kvm_enabled() && !kvm_s390_cpu_models_supported()) {
         return;
     }

-    cpu->model = g_malloc0(sizeof(*cpu->model));
-    kvm_s390_get_host_cpu_model(cpu->model, &err);
-    if (err) {
+    max_model = get_max_cpu_model(&err);
+    if (err || !max_model) {
         error_report_err(err);
-        g_free(cpu->model);
         /* fallback to unsupported cpu models */
-        cpu->model = NULL;
+        return;
     }
+    /* copy the host model so it can be modified */
+    cpu->model = g_memdup(max_model, sizeof(*cpu->model));
 }
-#endif

 static void s390_qemu_cpu_model_initfn(Object *obj)
 {
@@ -969,15 +958,12 @@ void s390_cpu_model_class_register_props(ObjectClass *oc)
                                   NULL);
 }

-#ifdef CONFIG_KVM
 static void s390_host_cpu_model_class_init(ObjectClass *oc, void *data)
 {
     S390CPUClass *xcc = S390_CPU_CLASS(oc);

-    xcc->kvm_required = true;
-    xcc->desc = "KVM only: All recognized features";
+    xcc->desc = "All supported and available features";
 }
-#endif

 static void s390_base_cpu_model_class_init(ObjectClass *oc, void *data)
 {
@@ -1042,7 +1028,6 @@ static const TypeInfo qemu_s390_cpu_type_info = {
     .class_init = s390_qemu_cpu_model_class_init,
 };

-#ifdef CONFIG_KVM
 static const TypeInfo host_s390_cpu_type_info = {
     .name = S390_CPU_TYPE_NAME("host"),
     .parent = TYPE_S390_CPU,
@@ -1050,7 +1035,6 @@ static const TypeInfo host_s390_cpu_type_info = {
     .instance_finalize = s390_cpu_model_finalize,
     .class_init = s390_host_cpu_model_class_init,
 };
-#endif

 static void register_types(void)
 {
@@ -1093,9 +1077,7 @@ static void register_types(void)
     }

     type_register_static(&qemu_s390_cpu_type_info);
-#ifdef CONFIG_KVM
     type_register_static(&host_s390_cpu_type_info);
-#endif
 }

 type_init(register_types)
--
2.9.3


--

David



reply via email to

[Prev in Thread] Current Thread [Next in Thread]