]> git.baikalelectronics.ru Git - kernel.git/commitdiff
x86/entry: Remove the apic/BUILD interrupt leftovers
authorThomas Gleixner <tglx@linutronix.de>
Thu, 21 May 2020 20:05:46 +0000 (22:05 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 11 Jun 2020 13:15:16 +0000 (15:15 +0200)
Remove all the code which was there to emit the system vector stubs. All
users are gone.

Move the now unused GET_CR2_INTO macro muck to head_64.S where the last
user is. Fixup the eye hurting comment there while at it.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Andy Lutomirski <luto@kernel.org>
Link: https://lore.kernel.org/r/20200521202119.927433002@linutronix.de
arch/x86/entry/calling.h
arch/x86/entry/entry_32.S
arch/x86/entry/entry_64.S
arch/x86/include/asm/entry_arch.h [deleted file]
arch/x86/kernel/head_64.S

index 98da0d3c0b1a76b0d008e8d067ce6781f858e6af..4208c1e3f601a1b4794971fceb6df50d37ca02fd 100644 (file)
@@ -351,23 +351,3 @@ For 32-bit we have the following conventions - kernel is built with
        call stackleak_erase
 #endif
 .endm
-
-/*
- * This does 'call enter_from_user_mode' unless we can avoid it based on
- * kernel config or using the static jump infrastructure.
- */
-.macro CALL_enter_from_user_mode
-#ifdef CONFIG_CONTEXT_TRACKING
-#ifdef CONFIG_JUMP_LABEL
-       STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_key, def=0
-#endif
-       call enter_from_user_mode
-.Lafter_call_\@:
-#endif
-.endm
-
-#ifdef CONFIG_PARAVIRT_XXL
-#define GET_CR2_INTO(reg) GET_CR2_INTO_AX ; _ASM_MOV %_ASM_AX, reg
-#else
-#define GET_CR2_INTO(reg) _ASM_MOV %cr2, reg
-#endif
index f8e8aeb10ba4b65a42d69e8302133f80fb077915..c8f176c88a3cce7acaa96227eaf5ac9693cae0ae 100644 (file)
@@ -1233,24 +1233,6 @@ SYM_FUNC_END(entry_INT80_32)
 #endif
 .endm
 
-#define BUILD_INTERRUPT3(name, nr, fn)                 \
-SYM_FUNC_START(name)                                   \
-       ASM_CLAC;                                       \
-       pushl   $~(nr);                                 \
-       SAVE_ALL switch_stacks=1;                       \
-       ENCODE_FRAME_POINTER;                           \
-       TRACE_IRQS_OFF                                  \
-       movl    %esp, %eax;                             \
-       call    fn;                                     \
-       jmp     ret_from_intr;                          \
-SYM_FUNC_END(name)
-
-#define BUILD_INTERRUPT(name, nr)              \
-       BUILD_INTERRUPT3(name, nr, smp_##name); \
-
-/* The include is where all of the SMP etc. interrupts come from */
-#include <asm/entry_arch.h>
-
 #ifdef CONFIG_PARAVIRT
 SYM_CODE_START(native_iret)
        iret
index 9c0722e725ef5abdc5b4c3813826a1a3c7820c65..389f97faee456c84845aa8a0ebae2619156f1fdd 100644 (file)
@@ -658,108 +658,7 @@ SYM_CODE_END(\asmsym)
  */
 #include <asm/idtentry.h>
 
-/*
- * Interrupt entry helper function.
- *
- * Entry runs with interrupts off. Stack layout at entry:
- * +----------------------------------------------------+
- * | regs->ss                                          |
- * | regs->rsp                                         |
- * | regs->eflags                                      |
- * | regs->cs                                          |
- * | regs->ip                                          |
- * +----------------------------------------------------+
- * | regs->orig_ax = ~(interrupt number)               |
- * +----------------------------------------------------+
- * | return address                                    |
- * +----------------------------------------------------+
- */
-SYM_CODE_START(interrupt_entry)
-       UNWIND_HINT_IRET_REGS offset=16
-       ASM_CLAC
-       cld
-
-       testb   $3, CS-ORIG_RAX+8(%rsp)
-       jz      1f
-       SWAPGS
-       FENCE_SWAPGS_USER_ENTRY
-       /*
-        * Switch to the thread stack. The IRET frame and orig_ax are
-        * on the stack, as well as the return address. RDI..R12 are
-        * not (yet) on the stack and space has not (yet) been
-        * allocated for them.
-        */
-       pushq   %rdi
-
-       /* Need to switch before accessing the thread stack. */
-       SWITCH_TO_KERNEL_CR3 scratch_reg=%rdi
-       movq    %rsp, %rdi
-       movq    PER_CPU_VAR(cpu_current_top_of_stack), %rsp
-
-        /*
-         * We have RDI, return address, and orig_ax on the stack on
-         * top of the IRET frame. That means offset=24
-         */
-       UNWIND_HINT_IRET_REGS base=%rdi offset=24
-
-       pushq   7*8(%rdi)               /* regs->ss */
-       pushq   6*8(%rdi)               /* regs->rsp */
-       pushq   5*8(%rdi)               /* regs->eflags */
-       pushq   4*8(%rdi)               /* regs->cs */
-       pushq   3*8(%rdi)               /* regs->ip */
-       UNWIND_HINT_IRET_REGS
-       pushq   2*8(%rdi)               /* regs->orig_ax */
-       pushq   8(%rdi)                 /* return address */
-
-       movq    (%rdi), %rdi
-       jmp     2f
-1:
-       FENCE_SWAPGS_KERNEL_ENTRY
-2:
-       PUSH_AND_CLEAR_REGS save_ret=1
-       ENCODE_FRAME_POINTER 8
-
-       testb   $3, CS+8(%rsp)
-       jz      1f
-
-       /*
-        * IRQ from user mode.
-        *
-        * We need to tell lockdep that IRQs are off.  We can't do this until
-        * we fix gsbase, and we should do it before enter_from_user_mode
-        * (which can take locks).  Since TRACE_IRQS_OFF is idempotent,
-        * the simplest way to handle it is to just call it twice if
-        * we enter from user mode.  There's no reason to optimize this since
-        * TRACE_IRQS_OFF is a no-op if lockdep is off.
-        */
-       TRACE_IRQS_OFF
-
-       CALL_enter_from_user_mode
-
-1:
-       ENTER_IRQ_STACK old_rsp=%rdi save_ret=1
-       /* We entered an interrupt context - irqs are off: */
-       TRACE_IRQS_OFF
-
-       ret
-SYM_CODE_END(interrupt_entry)
-_ASM_NOKPROBE(interrupt_entry)
-
 SYM_CODE_START_LOCAL(common_interrupt_return)
-ret_from_intr:
-       DISABLE_INTERRUPTS(CLBR_ANY)
-       TRACE_IRQS_OFF
-
-       LEAVE_IRQ_STACK
-
-       testb   $3, CS(%rsp)
-       jz      retint_kernel
-
-       /* Interrupt came from user space */
-.Lretint_user:
-       mov     %rsp,%rdi
-       call    prepare_exit_to_usermode
-
 SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL)
 #ifdef CONFIG_DEBUG_ENTRY
        /* Assert that pt_regs indicates user mode. */
@@ -802,23 +701,6 @@ SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL)
        INTERRUPT_RETURN
 
 
-/* Returning to kernel space */
-retint_kernel:
-#ifdef CONFIG_PREEMPTION
-       /* Interrupts are off */
-       /* Check if we need preemption */
-       btl     $9, EFLAGS(%rsp)                /* were interrupts off? */
-       jnc     1f
-       cmpl    $0, PER_CPU_VAR(__preempt_count)
-       jnz     1f
-       call    preempt_schedule_irq
-1:
-#endif
-       /*
-        * The iretq could re-enable interrupts:
-        */
-       TRACE_IRQS_IRETQ
-
 SYM_INNER_LABEL(restore_regs_and_return_to_kernel, SYM_L_GLOBAL)
 #ifdef CONFIG_DEBUG_ENTRY
        /* Assert that pt_regs indicates kernel mode. */
@@ -931,31 +813,6 @@ native_irq_return_ldt:
 SYM_CODE_END(common_interrupt_return)
 _ASM_NOKPROBE(common_interrupt_return)
 
-/*
- * APIC interrupts.
- */
-.macro apicinterrupt3 num sym do_sym
-SYM_CODE_START(\sym)
-       UNWIND_HINT_IRET_REGS
-       pushq   $~(\num)
-       call    interrupt_entry
-       UNWIND_HINT_REGS indirect=1
-       call    \do_sym /* rdi points to pt_regs */
-       jmp     ret_from_intr
-SYM_CODE_END(\sym)
-_ASM_NOKPROBE(\sym)
-.endm
-
-/* Make sure APIC interrupt handlers end up in the irqentry section: */
-#define PUSH_SECTION_IRQENTRY  .pushsection .irqentry.text, "ax"
-#define POP_SECTION_IRQENTRY   .popsection
-
-.macro apicinterrupt num sym do_sym
-PUSH_SECTION_IRQENTRY
-apicinterrupt3 \num \sym \do_sym
-POP_SECTION_IRQENTRY
-.endm
-
 /*
  * Reload gs selector with exception handling
  * edi:  new selector
diff --git a/arch/x86/include/asm/entry_arch.h b/arch/x86/include/asm/entry_arch.h
deleted file mode 100644 (file)
index 3e841ed..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * This file is designed to contain the BUILD_INTERRUPT specifications for
- * all of the extra named interrupt vectors used by the architecture.
- * Usually this is the Inter Process Interrupts (IPIs)
- */
-
-/*
- * The following vectors are part of the Linux architecture, there
- * is no hardware IRQ pin equivalent for them, they are triggered
- * through the ICC by us (IPIs)
- */
index 4fc33fdf0f16163aab5c036b3f4950608c947fdc..16da4ac015971c477054d7a91c68d79cb40458df 100644 (file)
 #ifdef CONFIG_PARAVIRT_XXL
 #include <asm/asm-offsets.h>
 #include <asm/paravirt.h>
+#define GET_CR2_INTO(reg) GET_CR2_INTO_AX ; _ASM_MOV %_ASM_AX, reg
 #else
 #define INTERRUPT_RETURN iretq
+#define GET_CR2_INTO(reg) _ASM_MOV %cr2, reg
 #endif
 
-/* we are not able to switch in one step to the final KERNEL ADDRESS SPACE
+/*
+ * We are not able to switch in one step to the final KERNEL ADDRESS SPACE
  * because we need identity-mapped pages.
- *
  */
-
 #define l4_index(x)    (((x) >> 39) & 511)
 #define pud_index(x)   (((x) >> PUD_SHIFT) & (PTRS_PER_PUD-1))