From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FCBBC3F68F for ; Fri, 10 Jan 2020 16:09:57 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D13F920673 for ; Fri, 10 Jan 2020 16:09:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Jq9ZO+Rv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D13F920673 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6MnQUTkhikxOt7k9a371uxq9o0j/xEvbRifnzp1tHEw=; b=Jq9ZO+RvzIHaiP 9hRuI58cPJk8kpYP+2ssBhvLY75yER7d6Nv6/DBc6qronmTL/VBaTs2I8NX+/uxEq4NvfRPxVB+r6 mZRKc4Ks3LwZfhMp1pn0ISVNDkpRhStZQWflhXV4DZ04+3aSN3JN4zcy210KlfPW1FUiy05iGRaLS JMMKBNPjde1wDrq7s18ZuYCiOyZF2TCyiKPPCx0aDpzMhm/xFy52rALUxQpJ40reJ1LK5t4fReqUh 0DoZ9gaaw4dp4E4kt7Qz2mj7D/CdmhaD7689SwNTJMMHvnNJ+hWUYOB00/gOYTVQlzrFfDROfmuFX RbAVzT1NhvaeoV6GzhrQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ipwrE-0008E6-5Q; Fri, 10 Jan 2020 16:09:56 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ipwr3-00085N-Rn for linux-arm-kernel@lists.infradead.org; Fri, 10 Jan 2020 16:09:47 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id F148B30E; Fri, 10 Jan 2020 08:09:44 -0800 (PST) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6C5533F6C4; Fri, 10 Jan 2020 08:09:43 -0800 (PST) Date: Fri, 10 Jan 2020 16:09:41 +0000 From: Mark Rutland To: Anshuman Khandual Subject: Re: [PATCH 12/17] arm64: debug-monitors: refactor MDSCR manipulation Message-ID: <20200110160941.GH33536@lakrids.cambridge.arm.com> References: <20200108185634.1163-1-mark.rutland@arm.com> <20200108185634.1163-13-mark.rutland@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1+11 (2f07cb52) (2018-12-01) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200110_080945_982089_2F281268 X-CRM114-Status: GOOD ( 25.57 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: keescook@chromium.org, maz@kernel.org, robin.murphy@arm.com, broonie@kernel.org, james.morse@arm.com, julien.thierry.kdev@gmail.com, catalin.marinas@arm.com, labbott@redhat.com, will@kernel.org, linux-arm-kernel@lists.infradead.org, alex.popov@linux.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Jan 10, 2020 at 10:05:48AM +0530, Anshuman Khandual wrote: > > > On 01/09/2020 12:26 AM, Mark Rutland wrote: > > When we convert the ret_to_user/work_pending code to C, we're going to > > want to poke the MDSCR to enable/disable single-step. Let's factor out > > the existing code for this from debug-monitors.c. > > > > At the same time, we can make use of {read,write}_sysreg() directly, and > > get rid of the mdscr_{read,write} wrappers. > > > > The existing code masked DAIF when manipulating MDSCR_EL1, but this > > should not be necessary. Exceptions can be taken immediately before DAIF > > is masked, and given the lack of an ISB can also be taken after DAIF is > > unmasked as writes to DAIF are only self-synchronizing and not > > context-synchronizing in general. We may want to add an ISB to ensure > > that updates to MDSCR have taken effect, however. > > Any reason this patch choose not add that ISB for now after writing > mdscr_el1 register via sysreg_clear_set(). I didn't want to make that functional change without justification. For example, the ISB wouldn't be needed for changes that only affect userspace. Thanks, Mark. > > > > > Signed-off-by: Mark Rutland > > Cc: Catalin Marinas > > Cc: Will Deacon > > --- > > arch/arm64/include/asm/debug-monitors.h | 10 ++++++++++ > > arch/arm64/kernel/debug-monitors.c | 32 +++++++------------------------- > > 2 files changed, 17 insertions(+), 25 deletions(-) > > > > diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h > > index 7619f473155f..342867e50c54 100644 > > --- a/arch/arm64/include/asm/debug-monitors.h > > +++ b/arch/arm64/include/asm/debug-monitors.h > > @@ -107,6 +107,16 @@ enum dbg_active_el { > > void enable_debug_monitors(enum dbg_active_el el); > > void disable_debug_monitors(enum dbg_active_el el); > > > > +static __always_inline void __enable_single_step_nosync(void) > > +{ > > + sysreg_clear_set(mdscr_el1, 0, DBG_MDSCR_SS); > > +} > > + > > +static __always_inline void __disable_single_step_nosync(void) > > +{ > > + sysreg_clear_set(mdscr_el1, DBG_MDSCR_SS, 0); > > +} > > + > > void user_rewind_single_step(struct task_struct *task); > > void user_fastforward_single_step(struct task_struct *task); > > > > diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c > > index 48222a4760c2..fa2d4145bd07 100644 > > --- a/arch/arm64/kernel/debug-monitors.c > > +++ b/arch/arm64/kernel/debug-monitors.c > > @@ -32,24 +32,6 @@ u8 debug_monitors_arch(void) > > } > > > > /* > > - * MDSCR access routines. > > - */ > > -static void mdscr_write(u32 mdscr) > > -{ > > - unsigned long flags; > > - flags = local_daif_save(); > > - write_sysreg(mdscr, mdscr_el1); > > - local_daif_restore(flags); > > -} > > -NOKPROBE_SYMBOL(mdscr_write); > > - > > -static u32 mdscr_read(void) > > -{ > > - return read_sysreg(mdscr_el1); > > -} > > -NOKPROBE_SYMBOL(mdscr_read); > > - > > -/* > > * Allow root to disable self-hosted debug from userspace. > > * This is useful if you want to connect an external JTAG debugger. > > */ > > @@ -91,9 +73,9 @@ void enable_debug_monitors(enum dbg_active_el el) > > enable |= DBG_MDSCR_KDE; > > > > if (enable && debug_enabled) { > > - mdscr = mdscr_read(); > > + mdscr = read_sysreg(mdscr_el1); > > mdscr |= enable; > > - mdscr_write(mdscr); > > + write_sysreg(mdscr, mdscr_el1); > > } > > } > > NOKPROBE_SYMBOL(enable_debug_monitors); > > @@ -112,9 +94,9 @@ void disable_debug_monitors(enum dbg_active_el el) > > disable &= ~DBG_MDSCR_KDE; > > > > if (disable) { > > - mdscr = mdscr_read(); > > + mdscr = read_sysreg(mdscr_el1); > > mdscr &= disable; > > - mdscr_write(mdscr); > > + write_sysreg(mdscr, mdscr_el1); > > } > > } > > NOKPROBE_SYMBOL(disable_debug_monitors); > > @@ -409,7 +391,7 @@ void kernel_enable_single_step(struct pt_regs *regs) > > { > > WARN_ON(!irqs_disabled()); > > set_regs_spsr_ss(regs); > > - mdscr_write(mdscr_read() | DBG_MDSCR_SS); > > + __enable_single_step_nosync(); > > enable_debug_monitors(DBG_ACTIVE_EL1); > > } > > NOKPROBE_SYMBOL(kernel_enable_single_step); > > @@ -417,7 +399,7 @@ NOKPROBE_SYMBOL(kernel_enable_single_step); > > void kernel_disable_single_step(void) > > { > > WARN_ON(!irqs_disabled()); > > - mdscr_write(mdscr_read() & ~DBG_MDSCR_SS); > > + __disable_single_step_nosync(); > > disable_debug_monitors(DBG_ACTIVE_EL1); > > } > > NOKPROBE_SYMBOL(kernel_disable_single_step); > > @@ -425,7 +407,7 @@ NOKPROBE_SYMBOL(kernel_disable_single_step); > > int kernel_active_single_step(void) > > { > > WARN_ON(!irqs_disabled()); > > - return mdscr_read() & DBG_MDSCR_SS; > > + return read_sysreg(mdscr_el1) & DBG_MDSCR_SS; > > } > > NOKPROBE_SYMBOL(kernel_active_single_step); > > > > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel