x86/asm/entry/64: Do not GET_THREAD_INFO() too early
authorDenys Vlasenko <dvlasenk@redhat.com>
Mon, 30 Mar 2015 18:09:34 +0000 (20:09 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 31 Mar 2015 07:31:11 +0000 (09:31 +0200)
At exit_intr, we GET_THREAD_INFO(%rcx) and then jump to
retint_kernel if saved CS was from kernel. But the code at
retint_kernel doesn't need %rcx.

Move GET_THREAD_INFO(%rcx) down, after CS check and branch.

While at it, remove "has a correct top of stack" comment.
After recent changes which eliminated FIXUP_TOP_OF_STACK,
we always have a correct pt_regs layout.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1427738975-7391-5-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/entry_64.S

index 34d60c34fca8c5d19b93d186ecffa789a4eed222..6f251a5ee1dcc9a40f287144a559d6f19a74a6d6 100644 (file)
@@ -658,13 +658,12 @@ ret_from_intr:
        CFI_ADJUST_CFA_OFFSET   RBP
 
 exit_intr:
-       GET_THREAD_INFO(%rcx)
        testl $3,CS(%rsp)
        je retint_kernel
-
        /* Interrupt came from user space */
+
+       GET_THREAD_INFO(%rcx)
        /*
-        * Has a correct top of stack.
         * %rcx: thread info. Interrupts off.
         */
 retint_with_reschedule: