powerpc/kprobes: Remove resume_execution() in kprobes
emulate_step() in kprobe_handler() would've already determined if the probed instruction can be emulated. We single-step in hardware only if the instruction couldn't be emulated. resume_execution() therefore is superfluous -- all we need is to fix up the instruction pointer after single-stepping. Thanks to Paul Mackerras for catching this. Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
83aea945c2
commit
db97bc7f99
|
@ -378,17 +378,6 @@ static int __kprobes trampoline_probe_handler(struct kprobe *p,
|
|||
* single-stepped a copy of the instruction. The address of this
|
||||
* copy is p->ainsn.insn.
|
||||
*/
|
||||
static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
|
||||
{
|
||||
int ret;
|
||||
unsigned int insn = *p->ainsn.insn;
|
||||
|
||||
regs->nip = (unsigned long)p->addr;
|
||||
ret = emulate_step(regs, insn);
|
||||
if (ret == 0)
|
||||
regs->nip = (unsigned long)p->addr + 4;
|
||||
}
|
||||
|
||||
static int __kprobes post_kprobe_handler(struct pt_regs *regs)
|
||||
{
|
||||
struct kprobe *cur = kprobe_running();
|
||||
|
@ -406,7 +395,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)
|
|||
cur->post_handler(cur, regs, 0);
|
||||
}
|
||||
|
||||
resume_execution(cur, regs);
|
||||
/* Adjust nip to after the single-stepped instruction */
|
||||
regs->nip = (unsigned long)cur->addr + 4;
|
||||
regs->msr |= kcb->kprobe_saved_msr;
|
||||
|
||||
/*Restore back the original saved kprobes variables and continue. */
|
||||
|
|
Loading…
Reference in New Issue