On Wed, Sep 30, 2015 at 03:33:29PM -0700, Bill Paul wrote: > When doing a re-initialization of a CPU core, the default state is to _not_ > have 64-bit long mode enabled. This means the LME (long mode enable) and LMA > (long mode active) bits in the EFER model-specific register should be cleared. > > However, the EFER state is part of the CPU environment which is > preserved by do_cpu_init(), so if EFER.LME and EFER.LMA were set at the > time an INIT IPI was received, they will remain set after the init completes. > > This is contrary to what the Intel architecture manual describes and what > happens on real hardware, and it leaves the CPU in a weird state that the > guest can't clear. > > To fix this, the 'efer' member of the CPUX86State structure has been moved > to an area outside the region preserved by do_cpu_init(), so that it can > be properly re-initialized by x86_cpu_reset(). > > Signed-off-by: Bill Paul <wp...@windriver.com> > CC: Paolo Bonzini <pbonz...@redhat.com> > CC: Richard Henderson <r...@twiddle.net> > CC: Eduardo Habkost <ehabk...@redhat.com>
Applied to x86 tree. Thanks! -- Eduardo