lkml.org 
[lkml]   [2020]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 09/14] x86/entry: Remove debug IDT frobbing
    This is all unused now.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    arch/x86/include/asm/debugreg.h | 19 -------------------
    arch/x86/include/asm/desc.h | 34 +---------------------------------
    arch/x86/kernel/cpu/common.c | 17 -----------------
    arch/x86/kernel/idt.c | 30 ------------------------------
    arch/x86/kernel/traps.c | 9 ---------
    5 files changed, 1 insertion(+), 108 deletions(-)

    --- a/arch/x86/include/asm/debugreg.h
    +++ b/arch/x86/include/asm/debugreg.h
    @@ -96,25 +96,6 @@ extern void aout_dump_debugregs(struct u

    extern void hw_breakpoint_restore(void);

    -#ifdef CONFIG_X86_64
    -DECLARE_PER_CPU(int, debug_stack_usage);
    -static inline void debug_stack_usage_inc(void)
    -{
    - __this_cpu_inc(debug_stack_usage);
    -}
    -static inline void debug_stack_usage_dec(void)
    -{
    - __this_cpu_dec(debug_stack_usage);
    -}
    -void debug_stack_set_zero(void);
    -void debug_stack_reset(void);
    -#else /* !X86_64 */
    -static inline void debug_stack_set_zero(void) { }
    -static inline void debug_stack_reset(void) { }
    -static inline void debug_stack_usage_inc(void) { }
    -static inline void debug_stack_usage_dec(void) { }
    -#endif /* X86_64 */
    -
    static __always_inline unsigned long local_db_save(void)
    {
    unsigned long dr7;
    --- a/arch/x86/include/asm/desc.h
    +++ b/arch/x86/include/asm/desc.h
    @@ -42,8 +42,6 @@ static inline void fill_ldt(struct desc_

    extern struct desc_ptr idt_descr;
    extern gate_desc idt_table[];
    -extern const struct desc_ptr debug_idt_descr;
    -extern gate_desc debug_idt_table[];

    struct gdt_page {
    struct desc_struct gdt[GDT_ENTRIES];
    @@ -390,31 +388,6 @@ void alloc_intr_gate(unsigned int n, con

    extern unsigned long system_vectors[];

    -#ifdef CONFIG_X86_64
    -DECLARE_PER_CPU(u32, debug_idt_ctr);
    -static __always_inline bool is_debug_idt_enabled(void)
    -{
    - if (this_cpu_read(debug_idt_ctr))
    - return true;
    -
    - return false;
    -}
    -
    -static __always_inline void load_debug_idt(void)
    -{
    - load_idt((const struct desc_ptr *)&debug_idt_descr);
    -}
    -#else
    -static inline bool is_debug_idt_enabled(void)
    -{
    - return false;
    -}
    -
    -static inline void load_debug_idt(void)
    -{
    -}
    -#endif
    -
    /*
    * The load_current_idt() must be called with interrupts disabled
    * to avoid races. That way the IDT will always be set back to the expected
    @@ -424,10 +397,7 @@ static inline void load_debug_idt(void)
    */
    static __always_inline void load_current_idt(void)
    {
    - if (is_debug_idt_enabled())
    - load_debug_idt();
    - else
    - load_idt((const struct desc_ptr *)&idt_descr);
    + load_idt((const struct desc_ptr *)&idt_descr);
    }

    extern void idt_setup_early_handler(void);
    @@ -438,11 +408,9 @@ extern void idt_setup_apic_and_irq_gates
    #ifdef CONFIG_X86_64
    extern void idt_setup_early_pf(void);
    extern void idt_setup_ist_traps(void);
    -extern void idt_setup_debugidt_traps(void);
    #else
    static inline void idt_setup_early_pf(void) { }
    static inline void idt_setup_ist_traps(void) { }
    -static inline void idt_setup_debugidt_traps(void) { }
    #endif

    extern void idt_invalidate(void *addr);
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -1672,23 +1672,6 @@ void syscall_init(void)
    X86_EFLAGS_IOPL|X86_EFLAGS_AC|X86_EFLAGS_NT);
    }

    -DEFINE_PER_CPU(int, debug_stack_usage);
    -DEFINE_PER_CPU(u32, debug_idt_ctr);
    -
    -noinstr void debug_stack_set_zero(void)
    -{
    - this_cpu_inc(debug_idt_ctr);
    - load_current_idt();
    -}
    -
    -noinstr void debug_stack_reset(void)
    -{
    - if (WARN_ON(!this_cpu_read(debug_idt_ctr)))
    - return;
    - if (this_cpu_dec_return(debug_idt_ctr) == 0)
    - load_current_idt();
    -}
    -
    #else /* CONFIG_X86_64 */

    DEFINE_PER_CPU(struct task_struct *, current_task) = &init_task;
    --- a/arch/x86/kernel/idt.c
    +++ b/arch/x86/kernel/idt.c
    @@ -158,14 +158,6 @@ static const __initconst struct idt_data
    static const __initconst struct idt_data early_pf_idts[] = {
    INTG(X86_TRAP_PF, asm_exc_page_fault),
    };
    -
    -/*
    - * Override for the debug_idt. Same as the default, but with interrupt
    - * stack set to DEFAULT_STACK (0). Required for NMI trap handling.
    - */
    -static const __initconst struct idt_data dbg_idts[] = {
    - INTG(X86_TRAP_DB, asm_exc_debug),
    -};
    #endif

    /* Must be page-aligned because the real IDT is used in a fixmap. */
    @@ -177,9 +169,6 @@ struct desc_ptr idt_descr __ro_after_ini
    };

    #ifdef CONFIG_X86_64
    -/* No need to be aligned, but done to keep all IDTs defined the same way. */
    -gate_desc debug_idt_table[IDT_ENTRIES] __page_aligned_bss;
    -
    /*
    * The exceptions which use Interrupt stacks. They are setup after
    * cpu_init() when the TSS has been initialized.
    @@ -192,15 +181,6 @@ static const __initconst struct idt_data
    ISTG(X86_TRAP_MC, asm_exc_machine_check, IST_INDEX_MCE),
    #endif
    };
    -
    -/*
    - * Override for the debug_idt. Same as the default, but with interrupt
    - * stack set to DEFAULT_STACK (0). Required for NMI trap handling.
    - */
    -const struct desc_ptr debug_idt_descr = {
    - .size = IDT_ENTRIES * 16 - 1,
    - .address = (unsigned long) debug_idt_table,
    -};
    #endif

    static inline void idt_init_desc(gate_desc *gate, const struct idt_data *d)
    @@ -292,16 +272,6 @@ void __init idt_setup_ist_traps(void)
    {
    idt_setup_from_table(idt_table, ist_idts, ARRAY_SIZE(ist_idts), true);
    }
    -
    -/**
    - * idt_setup_debugidt_traps - Initialize the debug idt table with debug traps
    - */
    -void __init idt_setup_debugidt_traps(void)
    -{
    - memcpy(&debug_idt_table, &idt_table, IDT_ENTRIES * 16);
    -
    - idt_setup_from_table(debug_idt_table, dbg_idts, ARRAY_SIZE(dbg_idts), false);
    -}
    #endif

    /**
    --- a/arch/x86/kernel/traps.c
    +++ b/arch/x86/kernel/traps.c
    @@ -798,12 +798,6 @@ static void noinstr handle_debug(struct
    return;
    }

    - /*
    - * Let others (NMI) know that the debug stack is in use
    - * as we may switch to the interrupt stack.
    - */
    - debug_stack_usage_inc();
    -
    /* It's safe to allow irq's after DR6 has been saved */
    cond_local_irq_enable(regs);

    @@ -831,7 +825,6 @@ static void noinstr handle_debug(struct

    out:
    cond_local_irq_disable(regs);
    - debug_stack_usage_dec();
    instrumentation_end();
    }

    @@ -1077,6 +1070,4 @@ void __init trap_init(void)
    cpu_init();

    idt_setup_ist_traps();
    -
    - idt_setup_debugidt_traps();
    }

    \
     
     \ /
      Last update: 2020-05-29 23:37    [W:2.059 / U:0.936 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site