|
@@ -233,27 +233,11 @@ DO_ERROR(X86_TRAP_UD, SIGILL, "invalid opcode", invalid_op)
|
|
|
DO_ERROR(X86_TRAP_OLD_MF, SIGFPE, "coprocessor segment overrun",coprocessor_segment_overrun)
|
|
|
DO_ERROR(X86_TRAP_TS, SIGSEGV, "invalid TSS", invalid_TSS)
|
|
|
DO_ERROR(X86_TRAP_NP, SIGBUS, "segment not present", segment_not_present)
|
|
|
-#ifdef CONFIG_X86_32
|
|
|
DO_ERROR(X86_TRAP_SS, SIGBUS, "stack segment", stack_segment)
|
|
|
-#endif
|
|
|
DO_ERROR(X86_TRAP_AC, SIGBUS, "alignment check", alignment_check)
|
|
|
|
|
|
#ifdef CONFIG_X86_64
|
|
|
/* Runs on IST stack */
|
|
|
-dotraplinkage void do_stack_segment(struct pt_regs *regs, long error_code)
|
|
|
-{
|
|
|
- enum ctx_state prev_state;
|
|
|
-
|
|
|
- prev_state = exception_enter();
|
|
|
- if (notify_die(DIE_TRAP, "stack segment", regs, error_code,
|
|
|
- X86_TRAP_SS, SIGBUS) != NOTIFY_STOP) {
|
|
|
- preempt_conditional_sti(regs);
|
|
|
- do_trap(X86_TRAP_SS, SIGBUS, "stack segment", regs, error_code, NULL);
|
|
|
- preempt_conditional_cli(regs);
|
|
|
- }
|
|
|
- exception_exit(prev_state);
|
|
|
-}
|
|
|
-
|
|
|
dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
|
|
|
{
|
|
|
static const char str[] = "double fault";
|
|
@@ -802,7 +786,7 @@ void __init trap_init(void)
|
|
|
set_intr_gate(X86_TRAP_OLD_MF, coprocessor_segment_overrun);
|
|
|
set_intr_gate(X86_TRAP_TS, invalid_TSS);
|
|
|
set_intr_gate(X86_TRAP_NP, segment_not_present);
|
|
|
- set_intr_gate_ist(X86_TRAP_SS, &stack_segment, STACKFAULT_STACK);
|
|
|
+ set_intr_gate(X86_TRAP_SS, stack_segment);
|
|
|
set_intr_gate(X86_TRAP_GP, general_protection);
|
|
|
set_intr_gate(X86_TRAP_SPURIOUS, spurious_interrupt_bug);
|
|
|
set_intr_gate(X86_TRAP_MF, coprocessor_error);
|