qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] cpuid problem in upstream qemu with kvm


From: Gleb Natapov
Subject: Re: [Qemu-devel] cpuid problem in upstream qemu with kvm
Date: Mon, 14 Dec 2009 22:00:02 +0200

On Mon, Dec 14, 2009 at 01:57:29PM -0600, Anthony Liguori wrote:
> Michael S. Tsirkin wrote:
> >On Mon, Dec 14, 2009 at 01:44:22PM -0600, Anthony Liguori wrote:
> >>Michael S. Tsirkin wrote:
> >>>Hi!
> >>>I have a linux guest where init crashes during boot with invalid opcode 
> >>>error
> >>>with kernel 2.6.31, but works fine with kernel 2.6.32.
> >>>It also works fine even with 2.6.31 with qemu-kvm.
> >>>
> >>>With Gleb's help, we figured out that the opcode in question is syscall, 
> >>>which
> >>>is unsupported by hardware on kvm with intel hosts, and is emulated in 
> >>>software
> >>>with intel hosts in 2.6.32 and up. AMD hosts support this natively.
> >>>
> >>>The root cause: by default qemu with kvm enabled reports the following CPU 
> >>>ID:
> >>>               address@hidden:~$ less /proc/cpuinfo
> >>>               processor       : 0
> >>>               vendor_id       : AuthenticAMD
> >>>               cpu family      : 6
> >>>               model           : 2
> >>>               model name      : QEMU Virtual CPU version 0.11.50
> >>>               stepping        : 3
> >>>               cpu MHz         : 2493.679
> >>>               cache size      : 512 KB
> >>>               fdiv_bug        : no
> >>>               hlt_bug         : no
> >>>               f00f_bug        : no
> >>>               coma_bug        : no
> >>>               fpu             : yes
> >>>               fpu_exception   : yes
> >>>               cpuid level     : 4
> >>>               wp              : yes
> >>>               flags           : fpu de pse tsc msr pae mce cx8 apic sep 
> >>> mtrr pge mca cmov pat
> >>>               pse36 clflush mmx fxsr sse sse2 syscall lm up pni
> >>>               bogomips        : 4987.35
> >>>               clflush size    : 64
> >>>               power management:
> >>>
> >>>Problem is, guest sees syscall+AMD vendor and concludes that it is ok to 
> >>>use
> >>>syscall opcode, which results in a crash (or at least, extra VMExits).
> >>>I understand from Avi that qemu-kvm solves this problem by reporting
> >>>the actual CPU vendor from host, to guest.
> >>The bit that's ugly about that is that we do not save/restore
> >>cpuid.vendor_id so that would break live migration.
> >>
> >>Regards,
> >>
> >>Anthony Liguori
> >
> >This is a feature.  It would be very wrong to save/restore cpuid IMO.
> >It must be part of machine config.
> 
> You can already do -cpu qemu64,vendor_id=AuthenticAMD or
> ,vendor_id=GenuineIntel.
> 
> If you don't specify anything explicitly, we use AuthenticAMD as a
> default.  Detecting the host by default is problematic because then
> the same invocation on a different host would change the visible
> vendor_id.
> 
> I thought KVM emulates the syscall instruction?  I swear I've seen
> patches for that.
> 
It is. Starting from 2.6.32.

--
                        Gleb.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]