From 6fe16636cd9ebd5a9cc6132cbb2f9fefcf39b9d4 Mon Sep 17 00:00:00 2001 From: Kris Van Hees Date: Wed, 8 Jul 2015 18:36:37 -0400 Subject: [PATCH] dtrace: implement dtrace_handle_badaddr() for x86 Signed-off-by: Kris Van Hees Acked-by: Nick Alcock --- arch/x86/kernel/dtrace_util.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/dtrace_util.c b/arch/x86/kernel/dtrace_util.c index 6b7e514c7721..4feba361f3bc 100644 --- a/arch/x86/kernel/dtrace_util.c +++ b/arch/x86/kernel/dtrace_util.c @@ -26,6 +26,15 @@ void dtrace_skip_instruction(struct pt_regs *regs) { regs->ip += insn.length; } +void dtrace_handle_badaddr(struct pt_regs *regs) { + unsigned long addr = read_cr2(); + + DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR); + this_cpu_core->cpuc_dtrace_illval = addr; + + dtrace_skip_instruction(regs); +} + typedef struct dtrace_invop_hdlr { uint8_t (*dtih_func)(struct pt_regs *); struct dtrace_invop_hdlr *dtih_next; @@ -45,15 +54,10 @@ int dtrace_die_notifier(struct notifier_block *nb, unsigned long val, switch (val) { case DIE_PAGE_FAULT: { - unsigned long addr = read_cr2(); - if (!DTRACE_CPUFLAG_ISSET(CPU_DTRACE_NOFAULT)) return NOTIFY_DONE; - DTRACE_CPUFLAG_SET(CPU_DTRACE_BADADDR); - this_cpu_core->cpuc_dtrace_illval = addr; - - dtrace_skip_instruction(dargs->regs); + dtrace_handle_badaddr(dargs->regs); return NOTIFY_OK | NOTIFY_STOP_MASK; } -- 2.50.1