diff mbox

[RFC,2/7] target-i386: Introduce compat function to set CPUID 'level'

Message ID 1366915386-14728-3-git-send-email-ehabkost@redhat.com
State New
Headers show

Commit Message

Eduardo Habkost April 25, 2013, 6:43 p.m. UTC
Introduce x86_cpu_compat_set_level(), which can be used by machine-type
init functions to keep compatibility when CPU models are changed.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 target-i386/cpu.c | 22 ++++++++++++++++++++++
 target-i386/cpu.h |  1 +
 2 files changed, 23 insertions(+)

Comments

Igor Mammedov April 26, 2013, 3:16 p.m. UTC | #1
On Thu, 25 Apr 2013 15:43:01 -0300
Eduardo Habkost <ehabkost@redhat.com> wrote:

> Introduce x86_cpu_compat_set_level(), which can be used by machine-type
> init functions to keep compatibility when CPU models are changed.
Doesn't seems to be used in this series. Why adding dead code, all that should
be replaced by static properties in next release. I plan to respin properties
series shortly after 1.5.

> 
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
>  target-i386/cpu.c | 22 ++++++++++++++++++++++
>  target-i386/cpu.h |  1 +
>  2 files changed, 23 insertions(+)
> 
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index a207474..6ef5842 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -996,6 +996,28 @@ void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w,
>      }
>  }
>  
> +/**
> + * x86_cpu_compat_set_level:
> + * @cpu_model: CPU model name to be changed. If NULL, all CPU models are changed
> + * @level: New value for 'level' field on CPU model
> + *
> + * Change CPU model 'level' field for compatibility.
> + *
> + * This function may be used by machine-type compatibility functions
> + * to set a backwards-compatible value for the 'level' field on CPU models.
> + */
> +void x86_cpu_compat_set_level(const char *cpu_model, uint32_t level)
> +{
> +    x86_def_t *def;
> +    int i;
> +    for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) {
> +        def = &builtin_x86_defs[i];
> +        if (!cpu_model || !strcmp(cpu_model, def->name)) {
> +            def->level = level;
> +        }
> +    }
> +}
> +
>  #ifdef CONFIG_KVM
>  static int cpu_x86_fill_model_id(char *str)
>  {
> diff --git a/target-i386/cpu.h b/target-i386/cpu.h
> index 60581e1..86a5988 100644
> --- a/target-i386/cpu.h
> +++ b/target-i386/cpu.h
> @@ -1256,6 +1256,7 @@ void disable_kvm_pv_eoi(void);
>  
>  void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w,
>                                   uint32_t feat_add, uint32_t feat_remove);
> +void x86_cpu_compat_set_level(const char *cpu_model, uint32_t level);
>  
>  
>  /* Return name of 32-bit register, from a R_* constant */
> -- 
> 1.8.1.4
> 
>
Eduardo Habkost April 26, 2013, 3:28 p.m. UTC | #2
On Fri, Apr 26, 2013 at 05:16:26PM +0200, Igor Mammedov wrote:
> On Thu, 25 Apr 2013 15:43:01 -0300
> Eduardo Habkost <ehabkost@redhat.com> wrote:
> 
> > Introduce x86_cpu_compat_set_level(), which can be used by machine-type
> > init functions to keep compatibility when CPU models are changed.
> Doesn't seems to be used in this series. Why adding dead code, all that should
> be replaced by static properties in next release. I plan to respin properties
> series shortly after 1.5.

I was planning to include another patch that changed the "level" field
on a CPU model, but in the end I left it out (it didn't look like a
necessary bug fix for 1.5). When this series gets out of RFC status, I
will remove the patch.
diff mbox

Patch

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index a207474..6ef5842 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -996,6 +996,28 @@  void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w,
     }
 }
 
+/**
+ * x86_cpu_compat_set_level:
+ * @cpu_model: CPU model name to be changed. If NULL, all CPU models are changed
+ * @level: New value for 'level' field on CPU model
+ *
+ * Change CPU model 'level' field for compatibility.
+ *
+ * This function may be used by machine-type compatibility functions
+ * to set a backwards-compatible value for the 'level' field on CPU models.
+ */
+void x86_cpu_compat_set_level(const char *cpu_model, uint32_t level)
+{
+    x86_def_t *def;
+    int i;
+    for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) {
+        def = &builtin_x86_defs[i];
+        if (!cpu_model || !strcmp(cpu_model, def->name)) {
+            def->level = level;
+        }
+    }
+}
+
 #ifdef CONFIG_KVM
 static int cpu_x86_fill_model_id(char *str)
 {
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 60581e1..86a5988 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -1256,6 +1256,7 @@  void disable_kvm_pv_eoi(void);
 
 void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w,
                                  uint32_t feat_add, uint32_t feat_remove);
+void x86_cpu_compat_set_level(const char *cpu_model, uint32_t level);
 
 
 /* Return name of 32-bit register, from a R_* constant */