x86 CPUID extended family/model
PATCH 1/1 x86 CPUID extended family/model
Hi,
(at least) AMD CPUs feature extended family/model bits in CPUID leaf 0000_0001|EAX. Refer to page 10 in:
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/25481.pdf
Those bits are necessary to model newer AMD CPUs:
-cpu qemu64,family=15,model=65,stepping=3 or
-cpu qemu64,family=16,model=4,stepping=2
Attached patch introduces support for specifying those bits on the command line and passing them to the guest. (Patch applies against qemu-svn and kvm-userspace)
Regards,
Andre.
P.S. I heard of a way to propagate the host CPUID bits to the guest, like -cpu=host, but couldn't find any code. Did I miss something?
Signature · 9 lines
Andre Przywara AMD-Operating System Research Center (OSRC), Dresden, Germany Tel: +49 351 277-84917 ----to satisfy European Law for business letters: AMD Saxony Limited Liability Company & Co. KG, Wilschdorfer Landstr. 101, 01109 Dresden, Germany Register Court Dresden: HRA 4896, General Partner authorized to represent: AMD Saxony LLC (Wilmington, Delaware, US) General Manager of AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
helper.c +7 -2
@@ -337,7 +337,7 @@ }else if (!strcmp (featurestr,"model" )) {char *err; model =strtol (val, &err,10 ); -if (!*val || *err || model <0 || model >0xf ) { +if (!*val || *err || model <0 || model >0xff ) {fprintf (stderr,"bad numerical value %s\n" , val); goto error; }
@@ -416,7 +416,12 @@ env->cpuid_vendor3 =CPUID_VENDOR_INTEL_3 ; } env->cpuid_level = def->level; - env->cpuid_version = (def->family <<8 ) | (def->model <<4 ) | def->stepping; +if (def->family >0x0F ) + env->cpuid_version =0xF00 | (def->family -0x0F )<<20 ; +else + env->cpuid_version = def->family <<8 ; + env->cpuid_version |= (def->model &0x0F ) <<4 ; + env->cpuid_version |= def->stepping | (def->model>>4 )<<16 ; env->cpuid_features = def->features; env->pat =0x0007040600070406ULL ; env->cpuid_ext_features = def->ext_features;
Quoted 1 line · Andre Przywara
P.S. I heard of a way to propagate the host CPUID bits to the guest, like -cpu=host, but couldn't find any code. Did I miss something?
Only ideas exist, not code, at the moment.
Signature · 1 line
error compiling committee.c: too many arguments to function