mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-18 22:34:48 +00:00
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: 5963e317b1e9 ("ftrace/x86: Do not change stacks in DEBUG when calling lockdep") Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Acked-by: Andy Lutomirski <luto@kernel.org> Link: https://lore.kernel.org/r/20200521202120.319418546@linutronix.de
This commit is contained in:
parent
fa95a0cb04
commit
9628f26bae
@ -67,44 +67,6 @@ SYM_CODE_END(native_usergs_sysret64)
|
||||
TRACE_IRQS_FLAGS EFLAGS(%rsp)
|
||||
.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.
|
||||
*
|
||||
@ -500,11 +462,7 @@ SYM_CODE_START(\asmsym)
|
||||
|
||||
UNWIND_HINT_REGS
|
||||
|
||||
.if \vector == X86_TRAP_DB
|
||||
TRACE_IRQS_OFF_DEBUG
|
||||
.else
|
||||
TRACE_IRQS_OFF
|
||||
.endif
|
||||
TRACE_IRQS_OFF
|
||||
|
||||
movq %rsp, %rdi /* pt_regs pointer */
|
||||
|
||||
@ -924,7 +882,7 @@ SYM_CODE_END(paranoid_entry)
|
||||
SYM_CODE_START_LOCAL(paranoid_exit)
|
||||
UNWIND_HINT_REGS
|
||||
DISABLE_INTERRUPTS(CLBR_ANY)
|
||||
TRACE_IRQS_OFF_DEBUG
|
||||
TRACE_IRQS_OFF
|
||||
testl %ebx, %ebx /* swapgs needed? */
|
||||
jnz .Lparanoid_exit_no_swapgs
|
||||
TRACE_IRQS_IRETQ
|
||||
@ -933,7 +891,7 @@ SYM_CODE_START_LOCAL(paranoid_exit)
|
||||
SWAPGS_UNSAFE_STACK
|
||||
jmp restore_regs_and_return_to_kernel
|
||||
.Lparanoid_exit_no_swapgs:
|
||||
TRACE_IRQS_IRETQ_DEBUG
|
||||
TRACE_IRQS_IRETQ
|
||||
/* Always restore stashed CR3 value (see paranoid_entry) */
|
||||
RESTORE_CR3 scratch_reg=%rbx save_reg=%r14
|
||||
jmp restore_regs_and_return_to_kernel
|
||||
|
Loading…
x
Reference in New Issue
Block a user