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: Christian Borntraeger
Subject: Re: [Qemu-devel] [PATCH] i386: Support "-cpu host" on TCG too
Date: Thu, 16 Feb 2017 15:43:16 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0

On 01/17/2017 06:43 PM, David Hildenbrand wrote:
> 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
> 
Looks sane to me. Can you resend properly, it looks like whitespace
got damaged all over the place.

Thanks


> 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)




reply via email to

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