Commit 9628f26b authored by Thomas Gleixner's avatar Thomas Gleixner

x86/entry/64: Remove TRACE_IRQS_*_DEBUG

Since INT3/#BP no longer runs on an IST, this workaround is no longer
required.

Tested by running lockdep+ftrace as described in the initial commit:

  5963e317 ("ftrace/x86: Do not change stacks in DEBUG when calling lockdep")
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Acked-by: default avatarAndy Lutomirski <luto@kernel.org>
Link: https://lore.kernel.org/r/20200521202120.319418546@linutronix.de
parent fa95a0cb
...@@ -67,44 +67,6 @@ SYM_CODE_END(native_usergs_sysret64) ...@@ -67,44 +67,6 @@ SYM_CODE_END(native_usergs_sysret64)
TRACE_IRQS_FLAGS EFLAGS(%rsp) TRACE_IRQS_FLAGS EFLAGS(%rsp)
.endm .endm
/*
* When dynamic function tracer is enabled it will add a breakpoint
* to all locations that it is about to modify, sync CPUs, update
* all the code, sync CPUs, then remove the breakpoints. In this time
* if lockdep is enabled, it might jump back into the debug handler
* outside the updating of the IST protection. (TRACE_IRQS_ON/OFF).
*
* We need to change the IDT table before calling TRACE_IRQS_ON/OFF to
* make sure the stack pointer does not get reset back to the top
* of the debug stack, and instead just reuses the current stack.
*/
#if defined(CONFIG_DYNAMIC_FTRACE) && defined(CONFIG_TRACE_IRQFLAGS)
.macro TRACE_IRQS_OFF_DEBUG
call debug_stack_set_zero
TRACE_IRQS_OFF
call debug_stack_reset
.endm
.macro TRACE_IRQS_ON_DEBUG
call debug_stack_set_zero
TRACE_IRQS_ON
call debug_stack_reset
.endm
.macro TRACE_IRQS_IRETQ_DEBUG
btl $9, EFLAGS(%rsp) /* interrupts off? */
jnc 1f
TRACE_IRQS_ON_DEBUG
1:
.endm
#else
# define TRACE_IRQS_OFF_DEBUG TRACE_IRQS_OFF
# define TRACE_IRQS_ON_DEBUG TRACE_IRQS_ON
# define TRACE_IRQS_IRETQ_DEBUG TRACE_IRQS_IRETQ
#endif
/* /*
* 64-bit SYSCALL instruction entry. Up to 6 arguments in registers. * 64-bit SYSCALL instruction entry. Up to 6 arguments in registers.
* *
...@@ -500,11 +462,7 @@ SYM_CODE_START(\asmsym) ...@@ -500,11 +462,7 @@ SYM_CODE_START(\asmsym)
UNWIND_HINT_REGS UNWIND_HINT_REGS
.if \vector == X86_TRAP_DB
TRACE_IRQS_OFF_DEBUG
.else
TRACE_IRQS_OFF TRACE_IRQS_OFF
.endif
movq %rsp, %rdi /* pt_regs pointer */ movq %rsp, %rdi /* pt_regs pointer */
...@@ -924,7 +882,7 @@ SYM_CODE_END(paranoid_entry) ...@@ -924,7 +882,7 @@ SYM_CODE_END(paranoid_entry)
SYM_CODE_START_LOCAL(paranoid_exit) SYM_CODE_START_LOCAL(paranoid_exit)
UNWIND_HINT_REGS UNWIND_HINT_REGS
DISABLE_INTERRUPTS(CLBR_ANY) DISABLE_INTERRUPTS(CLBR_ANY)
TRACE_IRQS_OFF_DEBUG TRACE_IRQS_OFF
testl %ebx, %ebx /* swapgs needed? */ testl %ebx, %ebx /* swapgs needed? */
jnz .Lparanoid_exit_no_swapgs jnz .Lparanoid_exit_no_swapgs
TRACE_IRQS_IRETQ TRACE_IRQS_IRETQ
...@@ -933,7 +891,7 @@ SYM_CODE_START_LOCAL(paranoid_exit) ...@@ -933,7 +891,7 @@ SYM_CODE_START_LOCAL(paranoid_exit)
SWAPGS_UNSAFE_STACK SWAPGS_UNSAFE_STACK
jmp restore_regs_and_return_to_kernel jmp restore_regs_and_return_to_kernel
.Lparanoid_exit_no_swapgs: .Lparanoid_exit_no_swapgs:
TRACE_IRQS_IRETQ_DEBUG TRACE_IRQS_IRETQ
/* Always restore stashed CR3 value (see paranoid_entry) */ /* Always restore stashed CR3 value (see paranoid_entry) */
RESTORE_CR3 scratch_reg=%rbx save_reg=%r14 RESTORE_CR3 scratch_reg=%rbx save_reg=%r14
jmp restore_regs_and_return_to_kernel jmp restore_regs_and_return_to_kernel
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment