From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754131AbdBNPcL (ORCPT ); Tue, 14 Feb 2017 10:32:11 -0500 Received: from mail.kernel.org ([198.145.29.136]:47864 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752924AbdBNPcD (ORCPT ); Tue, 14 Feb 2017 10:32:03 -0500 Date: Wed, 15 Feb 2017 00:31:40 +0900 From: Masami Hiramatsu To: "Jon Medhurst (Tixy)" Cc: Russell King , linux-kernel@vger.kernel.org, Peter Zijlstra , Ananth N Mavinakayanahalli , Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" , Wang Nan , Catalin Marinas , Will Deacon , "David A . Long" , Sandeepa Prabhu Subject: Re: [BUGFIX PATCH 2/3] kprobes/arm: Skip single-stepping in recursing path if possible Message-Id: <20170215003140.c30510159fd6b951e80871ac@kernel.org> In-Reply-To: <1487066837.2978.4.camel@linaro.org> References: <148699813647.8505.3671818093118978038.stgit@devbox> <148699827839.8505.1518065390542643677.stgit@devbox> <1487066837.2978.4.camel@linaro.org> X-Mailer: Sylpheed 3.5.0 (GTK+ 2.24.30; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 14 Feb 2017 10:07:17 +0000 "Jon Medhurst (Tixy)" wrote: > On Tue, 2017-02-14 at 00:04 +0900, Masami Hiramatsu wrote: > > Kprobes/arm skips single-stepping (moreover handling the event) > > if the conditional instruction must not be executed. This > > also apply the rule when we hit the recursing kprobe, so > > that kprobe does not count nmissed up in that case. > > Perhaps that last sentence would read better if written something like: > > "This also applies that rule when we hit a recursing kprobe, so that the > nmissed count isn't incremented in that case." OK, Thanks! > > > > Signed-off-by: Masami Hiramatsu > > Acked-by: Jon Medhurst > > > --- > > arch/arm/probes/kprobes/core.c | 19 ++++++++++--------- > > 1 file changed, 10 insertions(+), 9 deletions(-) > > > > diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c > > index 264fedb..84989ae 100644 > > --- a/arch/arm/probes/kprobes/core.c > > +++ b/arch/arm/probes/kprobes/core.c > > @@ -265,7 +265,15 @@ void __kprobes kprobe_handler(struct pt_regs *regs) > > #endif > > > > if (p) { > > - if (cur) { > > + if (!p->ainsn.insn_check_cc(regs->ARM_cpsr)) { > > + /* > > + * Probe hit but conditional execution check failed, > > + * so just skip the instruction and continue as if > > + * nothing had happened. > > + * In this case, we can skip recursing check too. > > + */ > > + singlestep_skip(p, regs); > > + } else if (cur) { > > /* Kprobe is pending, so we're recursing. */ > > switch (kcb->kprobe_status) { > > case KPROBE_HIT_ACTIVE: > > @@ -288,7 +296,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs) > > /* impossible cases */ > > BUG(); > > } > > - } else if (p->ainsn.insn_check_cc(regs->ARM_cpsr)) { > > + } else { > > /* Probe hit and conditional execution check ok. */ > > set_current_kprobe(p); > > kcb->kprobe_status = KPROBE_HIT_ACTIVE; > > @@ -309,13 +317,6 @@ void __kprobes kprobe_handler(struct pt_regs *regs) > > } > > reset_current_kprobe(); > > } > > - } else { > > - /* > > - * Probe hit but conditional execution check failed, > > - * so just skip the instruction and continue as if > > - * nothing had happened. > > - */ > > - singlestep_skip(p, regs); > > } > > } else if (cur) { > > /* We probably hit a jprobe. Call its break handler. */ > > -- Masami Hiramatsu