From: Kris Van Hees Date: Wed, 8 Jul 2015 22:36:37 +0000 (-0400) Subject: dtrace: implement dtrace_handle_badaddr() for x86 X-Git-Tag: v4.1.12-92~313^2~1 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=6fe16636cd9ebd5a9cc6132cbb2f9fefcf39b9d4;p=users%2Fjedix%2Flinux-maple.git dtrace: implement dtrace_handle_badaddr() for x86 Signed-off-by: Kris Van Hees Acked-by: Nick Alcock --- 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; }