diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/kernel/doublefault.c (renamed from arch/x86/kernel/doublefault_32.c) | 15 | ||||
-rw-r--r-- | arch/x86/kernel/traps.c | 3 |
3 files changed, 19 insertions, 1 deletions
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 7bd3bd310106..4ce822ed58f5 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile | |||
@@ -67,7 +67,7 @@ obj-$(CONFIG_KEXEC) += relocate_kernel_$(BITS).o crash.o | |||
67 | obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o | 67 | obj-$(CONFIG_CRASH_DUMP) += crash_dump_$(BITS).o |
68 | obj-y += kprobes/ | 68 | obj-y += kprobes/ |
69 | obj-$(CONFIG_MODULES) += module.o | 69 | obj-$(CONFIG_MODULES) += module.o |
70 | obj-$(CONFIG_DOUBLEFAULT) += doublefault_32.o | 70 | obj-$(CONFIG_DOUBLEFAULT) += doublefault.o |
71 | obj-$(CONFIG_KGDB) += kgdb.o | 71 | obj-$(CONFIG_KGDB) += kgdb.o |
72 | obj-$(CONFIG_VM86) += vm86_32.o | 72 | obj-$(CONFIG_VM86) += vm86_32.o |
73 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 73 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
diff --git a/arch/x86/kernel/doublefault_32.c b/arch/x86/kernel/doublefault.c index 155a13f33ed8..5d3fe8d36e4a 100644 --- a/arch/x86/kernel/doublefault_32.c +++ b/arch/x86/kernel/doublefault.c | |||
@@ -9,6 +9,8 @@ | |||
9 | #include <asm/processor.h> | 9 | #include <asm/processor.h> |
10 | #include <asm/desc.h> | 10 | #include <asm/desc.h> |
11 | 11 | ||
12 | #ifdef CONFIG_X86_32 | ||
13 | |||
12 | #define DOUBLEFAULT_STACKSIZE (1024) | 14 | #define DOUBLEFAULT_STACKSIZE (1024) |
13 | static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE]; | 15 | static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE]; |
14 | #define STACK_START (unsigned long)(doublefault_stack+DOUBLEFAULT_STACKSIZE) | 16 | #define STACK_START (unsigned long)(doublefault_stack+DOUBLEFAULT_STACKSIZE) |
@@ -67,3 +69,16 @@ struct tss_struct doublefault_tss __cacheline_aligned = { | |||
67 | .__cr3 = __pa_nodebug(swapper_pg_dir), | 69 | .__cr3 = __pa_nodebug(swapper_pg_dir), |
68 | } | 70 | } |
69 | }; | 71 | }; |
72 | |||
73 | /* dummy for do_double_fault() call */ | ||
74 | void df_debug(struct pt_regs *regs, long error_code) {} | ||
75 | |||
76 | #else /* !CONFIG_X86_32 */ | ||
77 | |||
78 | void df_debug(struct pt_regs *regs, long error_code) | ||
79 | { | ||
80 | pr_emerg("PANIC: double fault, error_code: 0x%lx\n", error_code); | ||
81 | show_regs(regs); | ||
82 | panic("Machine halted."); | ||
83 | } | ||
84 | #endif | ||
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 772e2a846dec..167d481c5fd3 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -254,6 +254,9 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) | |||
254 | tsk->thread.error_code = error_code; | 254 | tsk->thread.error_code = error_code; |
255 | tsk->thread.trap_nr = X86_TRAP_DF; | 255 | tsk->thread.trap_nr = X86_TRAP_DF; |
256 | 256 | ||
257 | #ifdef CONFIG_DOUBLEFAULT | ||
258 | df_debug(regs, error_code); | ||
259 | #endif | ||
257 | /* | 260 | /* |
258 | * This is always a kernel trap and never fixable (and thus must | 261 | * This is always a kernel trap and never fixable (and thus must |
259 | * never return). | 262 | * never return). |