]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm: Fix off-by-one bugs in kvm__setup_cpuid()
authorPekka Enberg <penberg@cs.helsinki.fi>
Sun, 11 Apr 2010 13:35:35 +0000 (16:35 +0300)
committerPekka Enberg <penberg@cs.helsinki.fi>
Sun, 11 Apr 2010 13:36:54 +0000 (16:36 +0300)
The cpuid_highest_func() and cpuid_highest_ext_func() return the highest
possible function number, not the first non-existing function.

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
tools/kvm/cpuid.c

index 92bac1d9d61a1adebd47f73e3b7c87496b09e033..e8c9549e77241d6c5b3d8f69cf9df5c7a3d4afc8 100644 (file)
@@ -84,7 +84,7 @@ void kvm__setup_cpuid(struct kvm *self)
 
        highest         = cpuid_highest_func();
 
-       for (function = 0; function < highest; function++) {
+       for (function = 0; function <= highest; function++) {
                /*
                 * NOTE NOTE NOTE! Functions 0x0b and 0x0d seem to need special
                 * treatment as per qemu sources but we treat them as regular
@@ -176,7 +176,7 @@ void kvm__setup_cpuid(struct kvm *self)
 
        highest_ext     = cpuid_highest_ext_func();
 
-       for (function = CPUID_GET_HIGHEST_EXT_FUNCTION; function < highest_ext; function++) {
+       for (function = CPUID_GET_HIGHEST_EXT_FUNCTION; function <= highest_ext; function++) {
                struct cpuid_regs regs;
 
                regs    = (struct cpuid_regs) {
@@ -195,17 +195,6 @@ void kvm__setup_cpuid(struct kvm *self)
                };
        }
 
-       /*
-        * We need to set up MAXPHYADDR; otherwise switching to long mode in the
-        * guest will triple fault.
-        */
-       if (highest_ext <= 0x80000008) {
-               kvm_cpuid->entries[ndx++]       = (struct kvm_cpuid_entry2) {
-                       .function       = 0x80000008,
-                       .eax            = 0x00003028,   /* 64-bit CPU */
-               };
-       }
-
        assert(ndx < MAX_KVM_CPUID_ENTRIES);
 
        kvm_cpuid->nent         = ndx;