Messages in this thread Patch in this message | | | Date | Wed, 19 Dec 2007 16:48:54 -0500 | From | Masami Hiramatsu <> | Subject | [PATCH 2/3] x86: add reenter_kprobe helper |
| |
From: Harvey Harrison <harvey.harrison@gmail.com>
[ mhiramat@redhat.com: updated it to latest x86.git ]
Factor common X86_32, X86_64 kprobe reenter logic from deeply indented section to helper function.
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Jim Keniston <jkenisto@us.ibm.com> ---
arch/x86/kernel/kprobes.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
Index: b/arch/x86/kernel/kprobes.c =================================================================== --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c @@ -427,6 +427,20 @@ void __kprobes arch_prepare_kretprobe(st /* Replace the return addr with trampoline addr */ *sara = (unsigned long) &kretprobe_trampoline; } +/* + * We have reentered the kprobe_handler(), since another probe was hit while + * within the handler. We save the original kprobes variables and just single + * step on the instruction of the new probe without calling any user handlers. + */ +static void __kprobes reenter_kprobe(struct kprobe *p, struct pt_regs *regs, + struct kprobe_ctlblk *kcb) +{ + save_previous_kprobe(kcb); + set_current_kprobe(p, regs, kcb); + kprobes_inc_nmissed_count(p); + prepare_singlestep(p, regs); + kcb->kprobe_status = KPROBE_REENTER; +}
/* * Interrupts are disabled on entry as trap3 is an interrupt gate and they @@ -471,17 +485,7 @@ static int __kprobes kprobe_handler(stru goto no_kprobe; #endif } - /* We have reentered the kprobe_handler(), since - * another probe was hit while within the handler. - * We here save the original kprobes variables and - * just single step on the instruction of the new probe - * without calling any user handlers. - */ - save_previous_kprobe(kcb); - set_current_kprobe(p, regs, kcb); - kprobes_inc_nmissed_count(p); - prepare_singlestep(p, regs); - kcb->kprobe_status = KPROBE_REENTER; + reenter_kprobe(p, regs, kcb); return 1; } else { if (*addr != BREAKPOINT_INSTRUCTION) { -- Masami Hiramatsu Software Engineer Hitachi Computer Products (America) Inc. Software Solutions Division
e-mail: mhiramat@redhat.com, masami.hiramatsu.pt@hitachi.com
| |