x86, paravirt: Replace GET_CR2_INTO_RCX with GET_CR2_INTO_RAX
GET_CR2_INTO_RCX is asinine: it is only used in one place, the actual
paravirt call returns the value in %rax, not %rcx; and the one place
that wants it wants the result in %r9. We actually generate as a
result of this call:
call ...
movq %rax, %rcx
xorq %rax, %rax /* this value isn't even used... */
movq %rcx, %r9
At least make the macro do what the paravirt call does, which is put
the value into %rax.
Nevermind the fact that the macro clobbers all the volatile registers.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Link: http://lkml.kernel.org/r/1334794610-5546-4-git-send-email-hpa@zytor.com
Cc: Glauber de Oliveira Costa <glommer@parallels.com>
This commit is contained in:
committed by
H. Peter Anvin
parent
84f4fc524e
commit
ffc4bc9c6f
@@ -23,8 +23,9 @@
|
||||
#ifdef CONFIG_PARAVIRT
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/paravirt.h>
|
||||
#define GET_CR2_INTO(reg) GET_CR2_INTO_RAX ; movq %rax, reg
|
||||
#else
|
||||
#define GET_CR2_INTO_RCX movq %cr2, %rcx
|
||||
#define GET_CR2_INTO(reg) movq %cr2, reg
|
||||
#endif
|
||||
|
||||
/* we are not able to switch in one step to the final KERNEL ADDRESS SPACE
|
||||
@@ -286,8 +287,7 @@ ENTRY(early_idt_handler)
|
||||
cmpl $2,early_recursion_flag(%rip)
|
||||
jz 1f
|
||||
incl early_recursion_flag(%rip)
|
||||
GET_CR2_INTO_RCX
|
||||
movq %rcx,%r9
|
||||
GET_CR2_INTO(%r9)
|
||||
xorl %r8d,%r8d # zero for error code
|
||||
movl %esi,%ecx # get vector number
|
||||
# Test %ecx against mask of vectors that push error code.
|
||||
|
||||
Reference in New Issue
Block a user