diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-13 03:44:22 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-13 03:44:22 -0500 |
commit | f8a6b2b9cee298a9663cbe38ce1eb5240987cb62 (patch) | |
tree | b356490269c9e77d164dcc1477792b882fbb8bdb /arch/x86/kernel/traps.c | |
parent | ba1511bf7fbda452138e4096bf10d5a382710f4f (diff) | |
parent | 071a0bc2ceace31266836801510879407a3701fa (diff) |
Merge branch 'linus' into x86/apic
Conflicts:
arch/x86/kernel/acpi/boot.c
arch/x86/mm/fault.c
Diffstat (limited to 'arch/x86/kernel/traps.c')
-rw-r--r-- | arch/x86/kernel/traps.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 214bc327a0c3..0d032d2d8a18 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -895,7 +895,7 @@ asmlinkage void math_state_restore(void) | |||
895 | EXPORT_SYMBOL_GPL(math_state_restore); | 895 | EXPORT_SYMBOL_GPL(math_state_restore); |
896 | 896 | ||
897 | #ifndef CONFIG_MATH_EMULATION | 897 | #ifndef CONFIG_MATH_EMULATION |
898 | asmlinkage void math_emulate(long arg) | 898 | void math_emulate(struct math_emu_info *info) |
899 | { | 899 | { |
900 | printk(KERN_EMERG | 900 | printk(KERN_EMERG |
901 | "math-emulation not enabled and no coprocessor found.\n"); | 901 | "math-emulation not enabled and no coprocessor found.\n"); |
@@ -905,16 +905,19 @@ asmlinkage void math_emulate(long arg) | |||
905 | } | 905 | } |
906 | #endif /* CONFIG_MATH_EMULATION */ | 906 | #endif /* CONFIG_MATH_EMULATION */ |
907 | 907 | ||
908 | dotraplinkage void __kprobes | 908 | dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs) |
909 | do_device_not_available(struct pt_regs *regs, long error) | ||
910 | { | 909 | { |
911 | #ifdef CONFIG_X86_32 | 910 | #ifdef CONFIG_X86_32 |
912 | if (read_cr0() & X86_CR0_EM) { | 911 | if (read_cr0() & X86_CR0_EM) { |
913 | conditional_sti(regs); | 912 | struct math_emu_info info = { }; |
914 | math_emulate(0); | 913 | |
914 | conditional_sti(®s); | ||
915 | |||
916 | info.regs = ®s; | ||
917 | math_emulate(&info); | ||
915 | } else { | 918 | } else { |
916 | math_state_restore(); /* interrupts still off */ | 919 | math_state_restore(); /* interrupts still off */ |
917 | conditional_sti(regs); | 920 | conditional_sti(®s); |
918 | } | 921 | } |
919 | #else | 922 | #else |
920 | math_state_restore(); | 923 | math_state_restore(); |