Re: [Qemu-devel] [PATCH 04/15] target-i386: Add family property to X86CPU

2012-04-20 Thread Andreas Färber
Am 20.04.2012 00:34, schrieb Michael Roth:
 On Wed, Apr 18, 2012 at 01:11:08AM +0200, Andreas Färber wrote:
 Add the property early in the initfn so that it can be used in helpers
 such as mce_init().

 Signed-off-by: Andreas Färber afaer...@suse.de
 ---
  target-i386/cpu.c |   38 +-
  1 files changed, 33 insertions(+), 5 deletions(-)

 diff --git a/target-i386/cpu.c b/target-i386/cpu.c
 index d30185b..aa0d328 100644
 --- a/target-i386/cpu.c
 +++ b/target-i386/cpu.c
[...]
 @@ -952,6 +972,9 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
  env-cpuid_svm_features = TCG_SVM_FEATURES;
  }
  x86_cpuid_set_model_id(env, def-model_id);
 +if (error_is_set(error)) {
 
 Missing an error_free(error) here

Thanks, fixed on qom-cpu-x86 branch.

Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg



Re: [Qemu-devel] [PATCH 04/15] target-i386: Add family property to X86CPU

2012-04-19 Thread Michael Roth
On Wed, Apr 18, 2012 at 01:11:08AM +0200, Andreas Färber wrote:
 Add the property early in the initfn so that it can be used in helpers
 such as mce_init().
 
 Signed-off-by: Andreas Färber afaer...@suse.de
 ---
  target-i386/cpu.c |   38 +-
  1 files changed, 33 insertions(+), 5 deletions(-)
 
 diff --git a/target-i386/cpu.c b/target-i386/cpu.c
 index d30185b..aa0d328 100644
 --- a/target-i386/cpu.c
 +++ b/target-i386/cpu.c
 @@ -27,6 +27,8 @@
  #include qemu-option.h
  #include qemu-config.h
  
 +#include qapi/qapi-visit-core.h
 +
  #include hyperv.h
  
  /* feature flags taken from Intel Processor Identification and the CPUID
 @@ -597,13 +599,30 @@ static int check_features_against_host(x86_def_t 
 *guest_def)
  return rv;
  }
  
 -static void x86_cpuid_version_set_family(CPUX86State *env, int family)
 +static void x86_cpuid_version_set_family(Object *obj, Visitor *v, void 
 *opaque,
 + const char *name, Error **errp)
  {
 +X86CPU *cpu = X86_CPU(obj);
 +CPUX86State *env = cpu-env;
 +const int64_t min = 0;
 +const int64_t max = 0xff + 0xf;
 +int64_t value;
 +
 +visit_type_int(v, value, name, errp);
 +if (error_is_set(errp)) {
 +return;
 +}
 +if (value  min || value  max) {
 +error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, ,
 +  name ? name : null, value, min, max);
 +return;
 +}
 +
  env-cpuid_version = ~0xff00f00;
 -if (family  0x0f) {
 -env-cpuid_version |= 0xf00 | ((family - 0x0f)  20);
 +if (value  0x0f) {
 +env-cpuid_version |= 0xf00 | ((value - 0x0f)  20);
  } else {
 -env-cpuid_version |= family  8;
 +env-cpuid_version |= value  8;
  }
  }
  
 @@ -911,6 +930,7 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
  {
  CPUX86State *env = cpu-env;
  x86_def_t def1, *def = def1;
 +Error *error = NULL;
  
  memset(def, 0, sizeof(*def));
  
 @@ -927,7 +947,7 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
  }
  env-cpuid_vendor_override = def-vendor_override;
  env-cpuid_level = def-level;
 -x86_cpuid_version_set_family(env, def-family);
 +object_property_set_int(OBJECT(cpu), def-family, family, error);
  x86_cpuid_version_set_model(env, def-model);
  x86_cpuid_version_set_stepping(env, def-stepping);
  env-cpuid_features = def-features;
 @@ -952,6 +972,9 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
  env-cpuid_svm_features = TCG_SVM_FEATURES;
  }
  x86_cpuid_set_model_id(env, def-model_id);
 +if (error_is_set(error)) {

Missing an error_free(error) here

 +return -1;
 +}
  return 0;
  }
  
 @@ -1476,6 +1499,11 @@ static void x86_cpu_initfn(Object *obj)
  CPUX86State *env = cpu-env;
  
  cpu_exec_init(env);
 +
 +object_property_add(obj, family, int,
 +NULL,
 +x86_cpuid_version_set_family, NULL, NULL, NULL);
 +
  env-cpuid_apic_id = env-cpu_index;
  mce_init(cpu);
  }
 -- 
 1.7.7
 
 



[Qemu-devel] [PATCH 04/15] target-i386: Add family property to X86CPU

2012-04-17 Thread Andreas Färber
Add the property early in the initfn so that it can be used in helpers
such as mce_init().

Signed-off-by: Andreas Färber afaer...@suse.de
---
 target-i386/cpu.c |   38 +-
 1 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index d30185b..aa0d328 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -27,6 +27,8 @@
 #include qemu-option.h
 #include qemu-config.h
 
+#include qapi/qapi-visit-core.h
+
 #include hyperv.h
 
 /* feature flags taken from Intel Processor Identification and the CPUID
@@ -597,13 +599,30 @@ static int check_features_against_host(x86_def_t 
*guest_def)
 return rv;
 }
 
-static void x86_cpuid_version_set_family(CPUX86State *env, int family)
+static void x86_cpuid_version_set_family(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
 {
+X86CPU *cpu = X86_CPU(obj);
+CPUX86State *env = cpu-env;
+const int64_t min = 0;
+const int64_t max = 0xff + 0xf;
+int64_t value;
+
+visit_type_int(v, value, name, errp);
+if (error_is_set(errp)) {
+return;
+}
+if (value  min || value  max) {
+error_set(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, ,
+  name ? name : null, value, min, max);
+return;
+}
+
 env-cpuid_version = ~0xff00f00;
-if (family  0x0f) {
-env-cpuid_version |= 0xf00 | ((family - 0x0f)  20);
+if (value  0x0f) {
+env-cpuid_version |= 0xf00 | ((value - 0x0f)  20);
 } else {
-env-cpuid_version |= family  8;
+env-cpuid_version |= value  8;
 }
 }
 
@@ -911,6 +930,7 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
 {
 CPUX86State *env = cpu-env;
 x86_def_t def1, *def = def1;
+Error *error = NULL;
 
 memset(def, 0, sizeof(*def));
 
@@ -927,7 +947,7 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
 }
 env-cpuid_vendor_override = def-vendor_override;
 env-cpuid_level = def-level;
-x86_cpuid_version_set_family(env, def-family);
+object_property_set_int(OBJECT(cpu), def-family, family, error);
 x86_cpuid_version_set_model(env, def-model);
 x86_cpuid_version_set_stepping(env, def-stepping);
 env-cpuid_features = def-features;
@@ -952,6 +972,9 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model)
 env-cpuid_svm_features = TCG_SVM_FEATURES;
 }
 x86_cpuid_set_model_id(env, def-model_id);
+if (error_is_set(error)) {
+return -1;
+}
 return 0;
 }
 
@@ -1476,6 +1499,11 @@ static void x86_cpu_initfn(Object *obj)
 CPUX86State *env = cpu-env;
 
 cpu_exec_init(env);
+
+object_property_add(obj, family, int,
+NULL,
+x86_cpuid_version_set_family, NULL, NULL, NULL);
+
 env-cpuid_apic_id = env-cpu_index;
 mce_init(cpu);
 }
-- 
1.7.7