diff options
| author | 2008-07-18 22:50:34 +0200 | |
|---|---|---|
| committer | 2008-07-18 22:50:34 +0200 | |
| commit | a208f37a465e222218974ab20a31b42b7b4893b2 (patch) | |
| tree | 77c6acdd4be32024330a14f2618b814126ce7a20 /arch/x86/mm/fault.c | |
| parent | x86: apic_ops for lguest (diff) | |
| parent | Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2 (diff) | |
| download | linux-dev-a208f37a465e222218974ab20a31b42b7b4893b2.tar.xz linux-dev-a208f37a465e222218974ab20a31b42b7b4893b2.zip | |
Merge branch 'linus' into x86/x2apic
Diffstat (limited to 'arch/x86/mm/fault.c')
| -rw-r--r-- | arch/x86/mm/fault.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index d0f5fce77d95..455f3fe67b42 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -10,6 +10,7 @@ #include <linux/string.h> #include <linux/types.h> #include <linux/ptrace.h> +#include <linux/mmiotrace.h> #include <linux/mman.h> #include <linux/mm.h> #include <linux/smp.h> @@ -49,6 +50,16 @@ #define PF_RSVD (1<<3) #define PF_INSTR (1<<4) +static inline int kmmio_fault(struct pt_regs *regs, unsigned long addr) +{ +#ifdef CONFIG_MMIOTRACE_HOOKS + if (unlikely(is_kmmio_active())) + if (kmmio_handler(regs, addr) == 1) + return -1; +#endif + return 0; +} + static inline int notify_page_fault(struct pt_regs *regs) { #ifdef CONFIG_KPROBES @@ -598,6 +609,8 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) if (notify_page_fault(regs)) return; + if (unlikely(kmmio_fault(regs, address))) + return; /* * We fault-in kernel-space virtual memory on-demand. The |
