diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2015-03-31 13:00:05 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-04-01 07:17:38 -0400 |
commit | 6ba71b7617f1fa65f19bd34f4484a0694ef9a520 (patch) | |
tree | c5eeb1fb9c84a819d83f4ab8b25eda7801d35f3d /arch/x86/kernel | |
parent | 4c9c0e919fef05b3bc6a8aff1db7a31b2ba4f4b6 (diff) |
x86/asm/entry/64: Simplify retint_kernel label usage, make retint_restore_args label local
Get rid of #define obfuscation of retint_kernel in
CONFIG_PREEMPT case by defining retint_kernel label always, not
only for CONFIG_PREEMPT.
Strip retint_kernel of .global-ness (ENTRY macro) - it has no
users outside of this file.
This looks like cosmetics, but it is not:
"je LABEL" can be optimized to short jump by assember
only if LABEL is not global, for global labels jump is always
a near one with relocation.
Convert retint_restore_args to a local numeric label, making it
clearer that it is not used elsewhere in the file.
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/1427821211-25099-3-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index f6e37de02ba7..1879c55bf0f7 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -57,10 +57,6 @@ | |||
57 | .section .entry.text, "ax" | 57 | .section .entry.text, "ax" |
58 | 58 | ||
59 | 59 | ||
60 | #ifndef CONFIG_PREEMPT | ||
61 | #define retint_kernel retint_restore_args | ||
62 | #endif | ||
63 | |||
64 | #ifdef CONFIG_PARAVIRT | 60 | #ifdef CONFIG_PARAVIRT |
65 | ENTRY(native_usergs_sysret64) | 61 | ENTRY(native_usergs_sysret64) |
66 | swapgs | 62 | swapgs |
@@ -741,18 +737,18 @@ opportunistic_sysret_failed: | |||
741 | jmp restore_args | 737 | jmp restore_args |
742 | 738 | ||
743 | /* Returning to kernel space */ | 739 | /* Returning to kernel space */ |
740 | retint_kernel: | ||
744 | #ifdef CONFIG_PREEMPT | 741 | #ifdef CONFIG_PREEMPT |
745 | /* Interrupts are off */ | 742 | /* Interrupts are off */ |
746 | /* Check if we need preemption */ | 743 | /* Check if we need preemption */ |
747 | ENTRY(retint_kernel) | ||
748 | cmpl $0,PER_CPU_VAR(__preempt_count) | 744 | cmpl $0,PER_CPU_VAR(__preempt_count) |
749 | jnz retint_restore_args | 745 | jnz 1f |
750 | bt $9,EFLAGS(%rsp) /* interrupts were off? */ | 746 | bt $9,EFLAGS(%rsp) /* interrupts were off? */ |
751 | jnc retint_restore_args | 747 | jnc 1f |
752 | call preempt_schedule_irq | 748 | call preempt_schedule_irq |
753 | jmp exit_intr | 749 | jmp exit_intr |
750 | 1: | ||
754 | #endif | 751 | #endif |
755 | retint_restore_args: | ||
756 | DISABLE_INTERRUPTS(CLBR_ANY) | 752 | DISABLE_INTERRUPTS(CLBR_ANY) |
757 | /* | 753 | /* |
758 | * The iretq could re-enable interrupts: | 754 | * The iretq could re-enable interrupts: |