lkml.org 
[lkml]   [2020]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch V9 37/39] x86/entry/64: Remove TRACE_IRQS_*_DEBUG
    From: Thomas Gleixner <tglx@linutronix.de>

    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: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Acked-by: Andy Lutomirski <luto@kernel.org>

    ---
    arch/x86/entry/entry_64.S | 48 ++--------------------------------------------
    1 file changed, 3 insertions(+), 45 deletions(-)

    --- a/arch/x86/entry/entry_64.S
    +++ b/arch/x86/entry/entry_64.S
    @@ -68,44 +68,6 @@ SYM_CODE_END(native_usergs_sysret64)
    .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.
    *
    * This is the only entry point used for 64-bit system calls. The
    @@ -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
    \
     
     \ /
      Last update: 2020-05-21 22:33    [W:2.221 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site