From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965005AbcIGNlc (ORCPT ); Wed, 7 Sep 2016 09:41:32 -0400 Received: from foss.arm.com ([217.140.101.70]:50006 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751081AbcIGNlb (ORCPT ); Wed, 7 Sep 2016 09:41:31 -0400 Date: Wed, 7 Sep 2016 14:41:21 +0100 From: Catalin Marinas To: David Long Cc: Pratyush Anand , Yang Shi , steve.capper@linaro.org, srikar@linux.vnet.ibm.com, Suzuki K Poulose , vijaya.kumar@caviumnetworks.com, will.deacon@arm.com, linux-kernel@vger.kernel.org, oleg@redhat.com, Sandeepa Prabhu , linux@arm.linux.org.uk, wcohen@redhat.com, Anna-Maria Gleixner , linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 3/5] arm64: Handle TRAP_HWBRKPT for user mode as well Message-ID: <20160907134120.7bjzgk3f2ntvl3qy@localhost> References: <20160906161139.GG19605@e104818-lin.cambridge.arm.com> <57CF36D2.4010404@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <57CF36D2.4010404@linaro.org> User-Agent: NeoMutt/ (1.7.0) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 06, 2016 at 05:36:18PM -0400, David Long wrote: > On 09/06/2016 12:11 PM, Catalin Marinas wrote: > > On Tue, Aug 02, 2016 at 11:00:07AM +0530, Pratyush Anand wrote: > > > --- a/arch/arm64/kernel/debug-monitors.c > > > +++ b/arch/arm64/kernel/debug-monitors.c > > > @@ -246,6 +246,8 @@ static void send_user_sigtrap(int si_code) > > > static int single_step_handler(unsigned long addr, unsigned int esr, > > > struct pt_regs *regs) > > > { > > > + bool handler_found = false; > > > + > > > /* > > > * If we are stepping a pending breakpoint, call the hw_breakpoint > > > * handler first. > > > @@ -253,7 +255,14 @@ static int single_step_handler(unsigned long addr, unsigned int esr, > > > if (!reinstall_suspended_bps(regs)) > > > return 0; > > > > > > - if (user_mode(regs)) { > > > +#ifdef CONFIG_KPROBES > > > + if (kprobe_single_step_handler(regs, esr) == DBG_HOOK_HANDLED) > > > + handler_found = true; > > > +#endif > > > + if (!handler_found && call_step_hook(regs, esr) == DBG_HOOK_HANDLED) > > > + handler_found = true; > > > + > > > + if (!handler_found && user_mode(regs)) { > > > send_user_sigtrap(TRAP_HWBKPT); > > > > Could we register kprobe_single_step_handler() via register_set_hook() > > and only invoke call_step_hook() above? > > I seem to recall a criticism of doing that in a much earlier kprobes64 patch > of mine. The concern was that it would cause unnecessarily more kernel > functions to be kprobes-blacklisted. Hence the hardcoded check and call. Ah, ok. I missed this aspect. -- Catalin