From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Steven Rostedt <rostedt@goodmis.org>,
Brian Gerst <brgerst@gmail.com>, Juergen Gross <jgross@suse.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Arnd Bergmann <arnd@arndb.de>
Subject: [patch 23/24] x86/entry: Convert SIMD coprocessor error exception to IDTENTRY
Date: Tue, 25 Feb 2020 23:16:29 +0100 [thread overview]
Message-ID: <20200225222650.431925624@linutronix.de> (raw)
In-Reply-To: 20200225221606.511535280@linutronix.de
Convert #XF to IDTENTRY_ERRORCODE:
- Implement the C entry point with DEFINE_IDTENTRY
- Emit the ASM stub with DECLARE_IDTENTRY
- Remove the ASM idtentry in 64bit
- Remove the open coded ASM entry code in 32bit
- Fixup the XEN/PV code
- Remove the old prototyoes
No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/entry/entry_32.S | 16 +---------------
arch/x86/entry/entry_64.S | 2 --
arch/x86/include/asm/idtentry.h | 1 +
arch/x86/include/asm/traps.h | 3 ---
arch/x86/kernel/idt.c | 2 +-
arch/x86/kernel/traps.c | 21 ++++++++++-----------
arch/x86/xen/enlighten_pv.c | 2 +-
arch/x86/xen/xen-asm_64.S | 2 +-
8 files changed, 15 insertions(+), 34 deletions(-)
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -733,7 +733,7 @@
.if \vector == X86_TRAP_XF
/* AMD 486 bug: invd from userspace calls exception 19 instead of #GP */
ALTERNATIVE "pushl $exc_general_protection", \
- "pushl $do_simd_coprocessor_error", \
+ "pushl $exc_simd_coprocessor_error", \
X86_FEATURE_XMM
.else
pushl $\cfunc
@@ -1299,20 +1299,6 @@ SYM_FUNC_END(name)
/* The include is where all of the SMP etc. interrupts come from */
#include <asm/entry_arch.h>
-SYM_CODE_START(simd_coprocessor_error)
- ASM_CLAC
- pushl $0
-#ifdef CONFIG_X86_INVD_BUG
- /* AMD 486 bug: invd from userspace calls exception 19 instead of #GP */
- ALTERNATIVE "pushl $do_general_protection", \
- "pushl $do_simd_coprocessor_error", \
- X86_FEATURE_XMM
-#else
- pushl $do_simd_coprocessor_error
-#endif
- jmp common_exception
-SYM_CODE_END(simd_coprocessor_error)
-
#ifdef CONFIG_PARAVIRT
SYM_CODE_START(native_iret)
iret
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -1061,8 +1061,6 @@ apicinterrupt IRQ_WORK_VECTOR irq_work
* Exception entry points.
*/
-idtentry X86_TRAP_XF simd_coprocessor_error do_simd_coprocessor_error has_error_code=0
-
idtentry X86_TRAP_PF page_fault do_page_fault has_error_code=1
#ifdef CONFIG_KVM_GUEST
idtentry X86_TRAP_PF async_page_fault do_async_page_fault has_error_code=1
--- a/arch/x86/include/asm/idtentry.h
+++ b/arch/x86/include/asm/idtentry.h
@@ -129,6 +129,7 @@ DECLARE_IDTENTRY(X86_TRAP_NM, exc_devic
DECLARE_IDTENTRY(X86_TRAP_OLD_MF, exc_coproc_segment_overrun);
DECLARE_IDTENTRY(X86_TRAP_SPURIOUS, exc_spurious_interrupt_bug);
DECLARE_IDTENTRY(X86_TRAP_MF, exc_coprocessor_error);
+DECLARE_IDTENTRY(X86_TRAP_XF, exc_simd_coprocessor_error);
/* Simple exception entries with error code pushed by hardware */
DECLARE_IDTENTRY_ERRORCODE(X86_TRAP_TS, exc_invalid_tss);
--- a/arch/x86/include/asm/traps.h
+++ b/arch/x86/include/asm/traps.h
@@ -21,7 +21,6 @@ asmlinkage void async_page_fault(void);
#ifdef CONFIG_X86_MCE
asmlinkage void machine_check(void);
#endif /* CONFIG_X86_MCE */
-asmlinkage void simd_coprocessor_error(void);
#if defined(CONFIG_X86_64) && defined(CONFIG_XEN_PV)
asmlinkage void xen_xennmi(void);
@@ -31,7 +30,6 @@ asmlinkage void xen_page_fault(void);
#ifdef CONFIG_X86_MCE
asmlinkage void xen_machine_check(void);
#endif /* CONFIG_X86_MCE */
-asmlinkage void xen_simd_coprocessor_error(void);
#endif
dotraplinkage void do_debug(struct pt_regs *regs, long error_code);
@@ -40,7 +38,6 @@ dotraplinkage void do_nmi(struct pt_regs
dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code, unsigned long cr2);
#endif
dotraplinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code, unsigned long address);
-dotraplinkage void do_simd_coprocessor_error(struct pt_regs *regs, long error_code);
#ifdef CONFIG_X86_32
dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code);
#endif
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -83,7 +83,7 @@ static const __initconst struct idt_data
INTG(X86_TRAP_SPURIOUS, asm_exc_spurious_interrupt_bug),
INTG(X86_TRAP_MF, asm_exc_coprocessor_error),
INTG(X86_TRAP_AC, asm_exc_alignment_check),
- INTG(X86_TRAP_XF, simd_coprocessor_error),
+ INTG(X86_TRAP_XF, asm_exc_simd_coprocessor_error),
#ifdef CONFIG_X86_32
TSKG(X86_TRAP_DF, GDT_ENTRY_DOUBLEFAULT_TSS),
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -848,7 +848,7 @@ NOKPROBE_SYMBOL(do_debug);
* the correct behaviour even in the presence of the asynchronous
* IRQ13 behaviour
*/
-static void math_error(struct pt_regs *regs, int error_code, int trapnr)
+static void math_error(struct pt_regs *regs, int trapnr)
{
struct task_struct *task = current;
struct fpu *fpu = &task->thread.fpu;
@@ -859,15 +859,15 @@ static void math_error(struct pt_regs *r
cond_local_irq_enable(regs);
if (!user_mode(regs)) {
- if (fixup_exception(regs, trapnr, error_code, 0))
+ if (fixup_exception(regs, trapnr, 0, 0))
return;
- task->thread.error_code = error_code;
+ task->thread.error_code = 0;
task->thread.trap_nr = trapnr;
- if (notify_die(DIE_TRAP, str, regs, error_code,
- trapnr, SIGFPE) != NOTIFY_STOP)
- die(str, regs, error_code);
+ if (notify_die(DIE_TRAP, str, regs, 0,trapnr,
+ SIGFPE) != NOTIFY_STOP)
+ die(str, regs, 0);
return;
}
@@ -877,7 +877,7 @@ static void math_error(struct pt_regs *r
fpu__save(fpu);
task->thread.trap_nr = trapnr;
- task->thread.error_code = error_code;
+ task->thread.error_code = 0;
si_code = fpu__exception_code(fpu, trapnr);
/* Retry when we get spurious exceptions: */
@@ -891,14 +891,13 @@ static void math_error(struct pt_regs *r
DEFINE_IDTENTRY(exc_coprocessor_error)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
- math_error(regs, 0, X86_TRAP_MF);
+ math_error(regs, X86_TRAP_MF);
}
-dotraplinkage void
-do_simd_coprocessor_error(struct pt_regs *regs, long error_code)
+DEFINE_IDTENTRY(exc_simd_coprocessor_error)
{
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
- math_error(regs, error_code, X86_TRAP_XF);
+ math_error(regs, X86_TRAP_XF);
}
DEFINE_IDTENTRY(exc_spurious_interrupt_bug)
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -632,7 +632,7 @@ static struct trap_array_entry trap_arra
TRAP_ENTRY(exc_spurious_interrupt_bug, false ),
TRAP_ENTRY(exc_coprocessor_error, false ),
TRAP_ENTRY(exc_alignment_check, false ),
- { simd_coprocessor_error, xen_simd_coprocessor_error, false },
+ TRAP_ENTRY(exc_simd_coprocessor_error, false ),
};
static bool __ref get_trap_addr(void **addr, unsigned int ist)
--- a/arch/x86/xen/xen-asm_64.S
+++ b/arch/x86/xen/xen-asm_64.S
@@ -50,7 +50,7 @@ xen_pv_trap asm_exc_alignment_check
#ifdef CONFIG_X86_MCE
xen_pv_trap machine_check
#endif /* CONFIG_X86_MCE */
-xen_pv_trap simd_coprocessor_error
+xen_pv_trap asm_exc_simd_coprocessor_error
#ifdef CONFIG_IA32_EMULATION
xen_pv_trap entry_INT80_compat
#endif
next prev parent reply other threads:[~2020-02-25 23:28 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-25 22:16 [patch 00/24] x86/entry: Consolidation - Part III Thomas Gleixner
2020-02-25 22:16 ` [patch 01/24] x86/traps: Split trap numbers out in a seperate header Thomas Gleixner
2020-02-26 5:52 ` Andy Lutomirski
2020-02-28 9:39 ` Alexandre Chartre
2020-02-25 22:16 ` [patch 02/24] x86/entry/64: Avoid pointless code when CONTEXT_TRACKING=n Thomas Gleixner
2020-02-26 5:52 ` Andy Lutomirski
2020-02-28 9:40 ` Alexandre Chartre
2020-03-02 22:25 ` Frederic Weisbecker
2020-02-25 22:16 ` [patch 03/24] x86/entry/64: Reorder idtentries Thomas Gleixner
2020-02-26 5:53 ` Andy Lutomirski
2020-02-28 9:40 ` Alexandre Chartre
2020-02-25 22:16 ` [patch 04/24] x86/entry: Distangle idtentry Thomas Gleixner
2020-02-28 10:27 ` Alexandre Chartre
2020-02-25 22:16 ` [patch 05/24] x86/entry/32: Provide macro to emit IDT entry stubs Thomas Gleixner
2020-02-28 10:33 ` Alexandre Chartre
2020-02-25 22:16 ` [patch 06/24] x86/idtentry: Provide macros to define/declare IDT entry points Thomas Gleixner
2020-02-28 10:42 ` Alexandre Chartre
2020-03-04 12:46 ` Thomas Gleixner
2020-02-25 22:16 ` [patch 07/24] x86/traps: Prepare for using DEFINE_IDTENTRY Thomas Gleixner
2020-02-28 14:13 ` Alexandre Chartre
2020-02-28 14:18 ` Thomas Gleixner
2020-02-25 22:16 ` [patch 08/24] x86/entry: Convert Divide Error to IDTENTRY Thomas Gleixner
2020-02-28 14:58 ` Alexandre Chartre
2020-03-04 13:09 ` Thomas Gleixner
2020-02-25 22:16 ` [patch 09/24] x86/entry: Convert Overflow exception " Thomas Gleixner
2020-02-25 22:16 ` [patch 10/24] x86/entry: Convert INT3 " Thomas Gleixner
2020-02-25 22:16 ` [patch 11/24] x86/entry: Convert Bounds " Thomas Gleixner
2020-02-25 22:16 ` [patch 12/24] x86/entry: Convert Invalid Opcode " Thomas Gleixner
2020-02-25 22:16 ` [patch 13/24] x86/entry: Convert Device not available " Thomas Gleixner
2020-02-25 22:16 ` [patch 14/24] x86/entry: Convert Coprocessor segment overrun " Thomas Gleixner
2020-02-25 22:16 ` [patch 15/24] x86/entry: Provide IDTENTRY_ERRORCODE Thomas Gleixner
2020-02-25 22:16 ` [patch 16/24] x86/entry: Convert Invalid TSS exception to IDTENTRY Thomas Gleixner
2020-02-25 22:16 ` [patch 17/24] x86/entry: Convert Segment not present " Thomas Gleixner
2020-02-25 22:16 ` [patch 18/24] x86/entry: Convert Stack segment " Thomas Gleixner
2020-02-25 22:16 ` [patch 19/24] x86/entry: Convert General protection " Thomas Gleixner
2020-02-25 22:16 ` [patch 20/24] x86/entry: Convert Spurious interrupt bug " Thomas Gleixner
2020-02-25 22:16 ` [patch 21/24] x86/entry: Convert Coprocessor error " Thomas Gleixner
2020-02-25 22:16 ` [patch 22/24] x86/entry: Convert Alignment check " Thomas Gleixner
2020-02-25 22:16 ` Thomas Gleixner [this message]
2020-02-25 22:16 ` [patch 24/24] x86/entry/32: Convert IRET exception to IDTENTRY_SW Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200225222650.431925624@linutronix.de \
--to=tglx@linutronix.de \
--cc=arnd@arndb.de \
--cc=brgerst@gmail.com \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rostedt@goodmis.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox