On Fri, Dec 28, 2012 at 09:01:25PM +0100, Igor Mammedov wrote: > Vendor property setter takes string as vendor value but cpudefs > use uint32_t vendor[123] fields to define vendor value. It makes it > difficult to unify and use property setter for values from cpudefs. > > Simplify code by using vendor property setter, vendor[123] fields > are converted into vendor[13] array to keep its value. And vendor > property setter is used to access/set value on CPU. > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com>
Reviewed-by: Eduardo Habkost <ehabk...@redhat.com> > --- > v2: > - restore deleted host_cpuid() call in kvm_cpu_fill_host() > Spotted-By: Eduardo Habkost <ehabk...@redhat.com> > --- > target-i386/cpu.c | 126 > +++++++++++++---------------------------------------- > target-i386/cpu.h | 6 +- > 2 files changed, 33 insertions(+), 99 deletions(-) > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 935bc42..4c483a7 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -275,7 +275,7 @@ typedef struct x86_def_t { > struct x86_def_t *next; > const char *name; > uint32_t level; > - uint32_t vendor1, vendor2, vendor3; > + char vendor[CPUID_VENDOR_SZ + 1]; > int family; > int model; > int stepping; > @@ -340,9 +340,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "qemu64", > .level = 4, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 6, > .model = 2, > .stepping = 3, > @@ -359,9 +357,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "phenom", > .level = 5, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 16, > .model = 2, > .stepping = 3, > @@ -387,9 +383,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "core2duo", > .level = 10, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 15, > .stepping = 11, > @@ -408,9 +402,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "kvm64", > .level = 5, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 15, > .model = 6, > .stepping = 1, > @@ -434,9 +426,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "qemu32", > .level = 4, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 3, > .stepping = 3, > @@ -447,9 +437,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "kvm32", > .level = 5, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 15, > .model = 6, > .stepping = 1, > @@ -464,9 +452,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "coreduo", > .level = 10, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 14, > .stepping = 8, > @@ -482,9 +468,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "486", > .level = 1, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 4, > .model = 0, > .stepping = 0, > @@ -494,9 +478,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "pentium", > .level = 1, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 5, > .model = 4, > .stepping = 3, > @@ -506,9 +488,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "pentium2", > .level = 2, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 5, > .stepping = 2, > @@ -518,9 +498,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "pentium3", > .level = 2, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 7, > .stepping = 3, > @@ -530,9 +508,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "athlon", > .level = 2, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 6, > .model = 2, > .stepping = 3, > @@ -546,9 +522,7 @@ static x86_def_t builtin_x86_defs[] = { > .name = "n270", > /* original is on level 10 */ > .level = 5, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 28, > .stepping = 2, > @@ -567,9 +541,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Conroe", > .level = 2, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 2, > .stepping = 3, > @@ -587,9 +559,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Penryn", > .level = 2, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 2, > .stepping = 3, > @@ -608,9 +578,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Nehalem", > .level = 2, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 2, > .stepping = 3, > @@ -629,9 +597,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Westmere", > .level = 11, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 44, > .stepping = 1, > @@ -651,9 +617,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "SandyBridge", > .level = 0xd, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 42, > .stepping = 1, > @@ -676,9 +640,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Haswell", > .level = 0xd, > - .vendor1 = CPUID_VENDOR_INTEL_1, > - .vendor2 = CPUID_VENDOR_INTEL_2, > - .vendor3 = CPUID_VENDOR_INTEL_3, > + .vendor = CPUID_VENDOR_INTEL, > .family = 6, > .model = 60, > .stepping = 1, > @@ -706,9 +668,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Opteron_G1", > .level = 5, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 15, > .model = 6, > .stepping = 1, > @@ -730,9 +690,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Opteron_G2", > .level = 5, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 15, > .model = 6, > .stepping = 1, > @@ -756,9 +714,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Opteron_G3", > .level = 5, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 15, > .model = 6, > .stepping = 1, > @@ -784,9 +740,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Opteron_G4", > .level = 0xd, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 21, > .model = 1, > .stepping = 2, > @@ -816,9 +770,7 @@ static x86_def_t builtin_x86_defs[] = { > { > .name = "Opteron_G5", > .level = 0xd, > - .vendor1 = CPUID_VENDOR_AMD_1, > - .vendor2 = CPUID_VENDOR_AMD_2, > - .vendor3 = CPUID_VENDOR_AMD_3, > + .vendor = CPUID_VENDOR_AMD, > .family = 21, > .model = 2, > .stepping = 0, > @@ -889,9 +841,7 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) > > x86_cpu_def->name = "host"; > host_cpuid(0x0, 0, &eax, &ebx, &ecx, &edx); > - x86_cpu_def->vendor1 = ebx; > - x86_cpu_def->vendor2 = edx; > - x86_cpu_def->vendor3 = ecx; > + x86cpu_vendor_words2str(x86_cpu_def->vendor, ebx, edx, ecx); > > host_cpuid(0x1, 0, &eax, &ebx, &ecx, &edx); > x86_cpu_def->family = ((eax >> 8) & 0x0F) + ((eax >> 20) & 0xFF); > @@ -919,9 +869,7 @@ static void kvm_cpu_fill_host(x86_def_t *x86_cpu_def) > x86_cpu_def->vendor_override = 0; > > /* Call Centaur's CPUID instruction. */ > - if (x86_cpu_def->vendor1 == CPUID_VENDOR_VIA_1 && > - x86_cpu_def->vendor2 == CPUID_VENDOR_VIA_2 && > - x86_cpu_def->vendor3 == CPUID_VENDOR_VIA_3) { > + if (!strcmp(x86_cpu_def->vendor, CPUID_VENDOR_VIA)) { > host_cpuid(0xC0000000, 0, &eax, &ebx, &ecx, &edx); > eax = kvm_arch_get_supported_cpuid(s, 0xC0000000, 0, R_EAX); > if (eax >= 0xC0000001) { > @@ -1245,10 +1193,8 @@ static void cpudef_2_x86_cpu(X86CPU *cpu, x86_def_t > *def, Error **errp) > { > CPUX86State *env = &cpu->env; > > - assert(def->vendor1); > - env->cpuid_vendor1 = def->vendor1; > - env->cpuid_vendor2 = def->vendor2; > - env->cpuid_vendor3 = def->vendor3; > + assert(def->vendor[0]); > + object_property_set_str(OBJECT(cpu), def->vendor, "vendor", errp); > env->cpuid_vendor_override = def->vendor_override; > object_property_set_int(OBJECT(cpu), def->level, "level", errp); > object_property_set_int(OBJECT(cpu), def->family, "family", errp); > @@ -1295,7 +1241,6 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, > const char *name) > */ > static int cpu_x86_parse_featurestr(x86_def_t *x86_cpu_def, char *features) > { > - unsigned int i; > char *featurestr; /* Single 'key=value" string being parsed */ > /* Features to be added */ > uint32_t plus_features = 0, plus_ext_features = 0; > @@ -1369,18 +1314,7 @@ static int cpu_x86_parse_featurestr(x86_def_t > *x86_cpu_def, char *features) > } > x86_cpu_def->xlevel = numvalue; > } else if (!strcmp(featurestr, "vendor")) { > - if (strlen(val) != 12) { > - fprintf(stderr, "vendor string must be 12 chars long\n"); > - goto error; > - } > - x86_cpu_def->vendor1 = 0; > - x86_cpu_def->vendor2 = 0; > - x86_cpu_def->vendor3 = 0; > - for(i = 0; i < 4; i++) { > - x86_cpu_def->vendor1 |= ((uint8_t)val[i ]) << (8 * i); > - x86_cpu_def->vendor2 |= ((uint8_t)val[i + 4]) << (8 * i); > - x86_cpu_def->vendor3 |= ((uint8_t)val[i + 8]) << (8 * i); > - } > + pstrcpy(x86_cpu_def->vendor, sizeof(x86_cpu_def->vendor), > val); > x86_cpu_def->vendor_override = 1; > } else if (!strcmp(featurestr, "model_id")) { > pstrcpy(x86_cpu_def->model_id, sizeof(x86_cpu_def->model_id), > diff --git a/target-i386/cpu.h b/target-i386/cpu.h > index 386c4f6..fbbe730 100644 > --- a/target-i386/cpu.h > +++ b/target-i386/cpu.h > @@ -515,14 +515,14 @@ > #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */ > #define CPUID_VENDOR_INTEL_2 0x49656e69 /* "ineI" */ > #define CPUID_VENDOR_INTEL_3 0x6c65746e /* "ntel" */ > +#define CPUID_VENDOR_INTEL "GenuineIntel" > > #define CPUID_VENDOR_AMD_1 0x68747541 /* "Auth" */ > #define CPUID_VENDOR_AMD_2 0x69746e65 /* "enti" */ > #define CPUID_VENDOR_AMD_3 0x444d4163 /* "cAMD" */ > +#define CPUID_VENDOR_AMD "AuthenticAMD" > > -#define CPUID_VENDOR_VIA_1 0x746e6543 /* "Cent" */ > -#define CPUID_VENDOR_VIA_2 0x48727561 /* "aurH" */ > -#define CPUID_VENDOR_VIA_3 0x736c7561 /* "auls" */ > +#define CPUID_VENDOR_VIA "CentaurHauls" > > #define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */ > #define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */ > -- > 1.7.1 > -- Eduardo