x86/cpuid: Fix booting on AMD Phenom 6-core platform
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 2 Mar 2017 19:58:20 +0000 (19:58 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 3 Mar 2017 19:24:29 +0000 (19:24 +0000)
c/s 5cecf60f4 "x86/cpuid: Handle leaf 0x1 in guest_cpuid()" causes Linux 4.10
to crash during boot.

It turns out to be because of the reported apic_id, which was altered to be
more consistent across guests.  Revert back to the previous behaviour, by
limiting the apic_id adjustment to HVM guests only.  Whomever gets to fixes
topology representation is going to have a lot of fun with non-power-of-2 AMD
boxes.

Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Sander Eikelenboom <linux@eikelenboom.it>
xen/arch/x86/cpuid.c

index 0dd35dc25696d8d4d72cf2cd25d6fcbee427562a..d6f6b88bda9cf8100f2b12a15c2b267e2b940a10 100644 (file)
@@ -749,7 +749,8 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf,
     case 0x1:
         /* TODO: Rework topology logic. */
         res->b &= 0x00ffffffu;
-        res->b |= (v->vcpu_id * 2) << 24;
+        if ( has_hvm_container_domain(d) )
+            res->b |= (v->vcpu_id * 2) << 24;
 
         /* TODO: Rework vPMU control in terms of toolstack choices. */
         if ( vpmu_available(v) &&