x86: Fix the CPUID Long Mode Address Size function.
authorGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 07:12:42 +0000 (23:12 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 07:12:42 +0000 (23:12 -0800)
The value in EAX has an 8 bit field for the linear address size and one for
the physical address size when calling that function. A recent change
implemented it but returned 0xff for both of those fields. That implies that
linear and physical addresses are 255 bits wide which is wrong. When using the
KVM CPU model this causes an error, presumably because some of those bits are
actually reserved, or the CPU or kernel realizes 255 bits is a bad value.

This change makes those values 48.

src/arch/x86/cpuid.cc

index 2656cd94eb66323fe81b3c865ae853bee0cdeab2..f3f9a82d7a2a043e46d428eae9061d9484659f11 100644 (file)
@@ -131,7 +131,7 @@ namespace X86ISA {
                                      0x69746e65, 0x444d4163);
                 break;
               case LongModeAddressSize:
-                result = CpuidResult(0x0000ffff, 0x00000000,
+                result = CpuidResult(0x00003030, 0x00000000,
                                      0x00000000, 0x00000000);
                 break;
 /*            case SVMInfo: