diff options
Diffstat (limited to 'arch/x86/mm/fault.c')
-rw-r--r-- | arch/x86/mm/fault.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index c1d018238f32..e58935c25b94 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -720,6 +720,18 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, | |||
720 | if (is_errata100(regs, address)) | 720 | if (is_errata100(regs, address)) |
721 | return; | 721 | return; |
722 | 722 | ||
723 | #ifdef CONFIG_X86_64 | ||
724 | /* | ||
725 | * Instruction fetch faults in the vsyscall page might need | ||
726 | * emulation. | ||
727 | */ | ||
728 | if (unlikely((error_code & PF_INSTR) && | ||
729 | ((address & ~0xfff) == VSYSCALL_START))) { | ||
730 | if (emulate_vsyscall(regs, address)) | ||
731 | return; | ||
732 | } | ||
733 | #endif | ||
734 | |||
723 | if (unlikely(show_unhandled_signals)) | 735 | if (unlikely(show_unhandled_signals)) |
724 | show_signal_msg(regs, error_code, address, tsk); | 736 | show_signal_msg(regs, error_code, address, tsk); |
725 | 737 | ||