Messages in this thread | | | Subject | Re: [PATCH] x86/boot/compressed/64: Do not corrupt EDX on EFER.LME=1 setting | From | Wei Huang <> | Date | Wed, 6 Feb 2019 13:50:40 -0600 |
| |
On 2/6/19 5:52 AM, Kirill A. Shutemov wrote: > RDMSR in the trampoline code overrides EDX, but we use the register to > indicate if 5-level paging has to enabled. It leads to failure to boot > on a 5-level paging machine. > > Preserve EDX on the stack while we are dealing with EFER. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > Fixes: b677dfae5aa1 ("x86/boot/compressed/64: Set EFER.LME=1 in 32-bit trampoline before returning to long mode") > Reported-by: Kyle D Pelton <kyle.d.pelton@intel.com> > Cc: Wei Huang <wei@redhat.com> > --- > arch/x86/boot/compressed/head_64.S | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S > index f105ae8651c9..f62e347862cc 100644 > --- a/arch/x86/boot/compressed/head_64.S > +++ b/arch/x86/boot/compressed/head_64.S > @@ -602,10 +602,12 @@ ENTRY(trampoline_32bit_src) > 3: > /* Set EFER.LME=1 as a precaution in case hypervsior pulls the rug */ > pushl %ecx > + pushl %edx > movl $MSR_EFER, %ecx > rdmsr > btsl $_EFER_LME, %eax > wrmsr > + popl %edx > popl %ecx > > /* Enable PAE and LA57 (if required) paging modes */ >
Oops, rdmsr indeed corrupts EDX.
Acked-by: Wei Huang <wei@redhat.com>
| |