From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48769) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5daL-0004OB-GN for qemu-devel@nongnu.org; Thu, 18 Jun 2015 13:26:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5daH-00008Y-SC for qemu-devel@nongnu.org; Thu, 18 Jun 2015 13:26:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37471) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5daH-00008O-Bd for qemu-devel@nongnu.org; Thu, 18 Jun 2015 13:26:37 -0400 From: Bandan Das References: <1434641064-8405-1-git-send-email-rkrcmar@redhat.com> <1434641064-8405-2-git-send-email-rkrcmar@redhat.com> <5582E3EA.2070407@redhat.com> Date: Thu, 18 Jun 2015 13:26:35 -0400 In-Reply-To: <5582E3EA.2070407@redhat.com> (Paolo Bonzini's message of "Thu, 18 Jun 2015 17:29:46 +0200") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 1/2] target-i386: emulate CPUID level of real hardware List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: rth@twiddle.net, qemu-devel@nongnu.org, ehabkost@redhat.com, Radim =?utf-8?B?S3LEjW3DocWZ?= Paolo Bonzini writes: > On 18/06/2015 17:24, Radim Kr=C4=8Dm=C3=A1=C5=99 wrote: >> W10 insider has a bug where it ignores CPUID level and interprets >> CPUID.(EAX=3D07H, ECX=3D0H) incorrectly, because CPUID in fact returned >> CPUID.(EAX=3D04H, ECX=3D0H); this resulted in execution of unsupported >> instructions. >>=20 >> While it's a Windows bug, there is no reason to emulate incorrect level; >> and amend xlevel while at it. >>=20 >> I have used http://instlatx64.atw.hu/ as a source of CPUID and checked >> that it matches Penryn Xeon X5472, Westmere Xeon W3520, SandyBridge >> i5-2540M, and Haswell i5-4670T. >>=20 >> kvm64 and qemu64 were bumped to 0xD to avoid similar problems. > > This unfortunately has to be done only for new machine types. Old types > will remain buggy forever. When is it recommended to add a new machine type ? And conventionally, new changes are to be made default and compat code takes care of the older machine types right ? Bandan > Paolo > >> Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 >> --- >> target-i386/cpu.c | 37 ++++++++++++++++++------------------- >> 1 file changed, 18 insertions(+), 19 deletions(-) >>=20 >> diff --git a/target-i386/cpu.c b/target-i386/cpu.c >> index 4e7cdaaaa57e..d392cf46f517 100644 >> --- a/target-i386/cpu.c >> +++ b/target-i386/cpu.c >> @@ -677,7 +677,7 @@ struct X86CPUDefinition { >> static X86CPUDefinition builtin_x86_defs[] =3D { >> { >> .name =3D "qemu64", >> - .level =3D 4, >> + .level =3D 0xd, >> .vendor =3D CPUID_VENDOR_AMD, >> .family =3D 6, >> .model =3D 6, >> @@ -753,7 +753,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> }, >> { >> .name =3D "kvm64", >> - .level =3D 5, >> + .level =3D 0xd, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 15, >> .model =3D 6, >> @@ -864,7 +864,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> }, >> { >> .name =3D "pentium3", >> - .level =3D 2, >> + .level =3D 3, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 6, >> .model =3D 7, >> @@ -889,8 +889,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> }, >> { >> .name =3D "n270", >> - /* original is on level 10 */ >> - .level =3D 5, >> + .level =3D 10, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 6, >> .model =3D 28, >> @@ -910,12 +909,12 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT2_NX, >> .features[FEAT_8000_0001_ECX] =3D >> CPUID_EXT3_LAHF_LM, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel(R) Atom(TM) CPU N270 @ 1.60GHz", >> }, >> { >> .name =3D "Conroe", >> - .level =3D 4, >> + .level =3D 10, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 6, >> .model =3D 15, >> @@ -932,12 +931,12 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, >> .features[FEAT_8000_0001_ECX] =3D >> CPUID_EXT3_LAHF_LM, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Celeron_4x0 (Conroe/Merom Class Core 2)", >> }, >> { >> .name =3D "Penryn", >> - .level =3D 4, >> + .level =3D 10, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 6, >> .model =3D 23, >> @@ -955,12 +954,12 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, >> .features[FEAT_8000_0001_ECX] =3D >> CPUID_EXT3_LAHF_LM, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core 2 Duo P9xxx (Penryn Class Core 2)", >> }, >> { >> .name =3D "Nehalem", >> - .level =3D 4, >> + .level =3D 11, >> .vendor =3D CPUID_VENDOR_INTEL, >> .family =3D 6, >> .model =3D 26, >> @@ -978,7 +977,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, >> .features[FEAT_8000_0001_ECX] =3D >> CPUID_EXT3_LAHF_LM, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core i7 9xx (Nehalem Class Core i7)", >> }, >> { >> @@ -1002,7 +1001,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX, >> .features[FEAT_8000_0001_ECX] =3D >> CPUID_EXT3_LAHF_LM, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Westmere E56xx/L56xx/X56xx (Nehalem-C)", >> }, >> { >> @@ -1031,7 +1030,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT3_LAHF_LM, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Xeon E312xx (Sandy Bridge)", >> }, >> { >> @@ -1063,7 +1062,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_EXT3_LAHF_LM, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Xeon E3-12xx v2 (Ivy Bridge)", >> }, >> { >> @@ -1097,7 +1096,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INV= PCID, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core Processor (Haswell, no TSX)", >> }, { >> .name =3D "Haswell", >> @@ -1131,7 +1130,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_7_0_EBX_RTM, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core Processor (Haswell)", >> }, >> { >> @@ -1167,7 +1166,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_7_0_EBX_SMAP, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core Processor (Broadwell, no TSX)", >> }, >> { >> @@ -1203,7 +1202,7 @@ static X86CPUDefinition builtin_x86_defs[] =3D { >> CPUID_7_0_EBX_SMAP, >> .features[FEAT_XSAVE] =3D >> CPUID_XSAVE_XSAVEOPT, >> - .xlevel =3D 0x8000000A, >> + .xlevel =3D 0x80000008, >> .model_id =3D "Intel Core Processor (Broadwell)", >> }, >> { >>=20