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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id CFFABC43219 for ; Thu, 24 Nov 2022 10:59:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc: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=gRxVfZtKcfGcRl3ZIwjILPPVOFw0oqUq8xULdkUGKpo=; b=LCDmqoVG8tOUmY 8UMbstO2P7uZctD3hNQ8dvLz4enDmBHYSN3WAMy89coUznRyhKEgvtP9BQZ4umv0oc44x5VbwhwM1 NiHHuf+kG/Zcg3WOWKbeJL4dB8QPrIoGjc2Iv88KFuBNaX6K8u+kO4b8sor7OGY0mqMAvRwrD3F5J hxAryee8Qkir96r05luohNXsMB2z2c0z+wWvU6efJ+cc8F5eADJ59tx6mpXReK4Jg2QX7kkmLtn1W 8mMZQA2zlE5hw9HHl47koyciEWTVG/mgmGkCbjeCFMN5yVXcZrIdaowuLj1a45TODipGgbZyxYDBP 9PvLIqHO2vTzbKP61sDQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oy9wA-007qdT-0L; Thu, 24 Nov 2022 10:58:34 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oy9w6-007qcl-J5 for linux-arm-kernel@lists.infradead.org; Thu, 24 Nov 2022 10:58:32 +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 7729623A; Thu, 24 Nov 2022 02:58:34 -0800 (PST) Received: from FVFF77S0Q05N (unknown [10.57.5.138]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F04F33F587; Thu, 24 Nov 2022 02:58:26 -0800 (PST) Date: Thu, 24 Nov 2022 10:58:21 +0000 From: Mark Rutland To: Mark Brown Cc: Catalin Marinas , Will Deacon , Ard Biesheuvel , linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v1 1/2] arm64/kpti: Move DAIF masking to C code Message-ID: References: <20221123180209.634650-1-broonie@kernel.org> <20221123180209.634650-2-broonie@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20221123180209.634650-2-broonie@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221124_025830_739213_BB318F32 X-CRM114-Status: GOOD ( 27.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, Nov 23, 2022 at 06:02:08PM +0000, Mark Brown wrote: > We really don't want to take an exception while replacing TTBR1 so we mask > DAIF during the actual update. Currently this is done in the assembly > function idmap_cpu_replace_ttbr1() but it could equally be done in the only > caller of that function, cpu_replace_ttbr1(). This simplifies the assembly > code slightly and means that when working with the code around masking DAIF > flags there is one less piece of assembly code which needs to be considered. > > While we're at it add a comment which makes explicit why we are masking > DAIF in this code. > > There should be no functional effect. > > Signed-off-by: Mark Brown When using GIC priority masking this means we'll also poke the PMR, but other than that this is identical, and getting rid of the asm variation will make it easier to clean up the DAIF / PMR manipulation for (p)NMI support. So this makes sense to me; I don't see a problem with the additional PMR poking in that case (it's consistent with other DAIF masking in C code), and we'll still correctly mask and restore all the relevant DAIF bits. FWIW: Reviewed-by: Mark Rutland Mark. > --- > arch/arm64/include/asm/mmu_context.h | 10 ++++++++++ > arch/arm64/mm/proc.S | 4 ---- > 2 files changed, 10 insertions(+), 4 deletions(-) > > diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h > index d3f8b5df0c1f..72dbd6400549 100644 > --- a/arch/arm64/include/asm/mmu_context.h > +++ b/arch/arm64/include/asm/mmu_context.h > @@ -18,6 +18,7 @@ > > #include > #include > +#include > #include > #include > #include > @@ -152,6 +153,7 @@ static inline void cpu_replace_ttbr1(pgd_t *pgdp, pgd_t *idmap) > typedef void (ttbr_replace_func)(phys_addr_t); > extern ttbr_replace_func idmap_cpu_replace_ttbr1; > ttbr_replace_func *replace_phys; > + unsigned long daif; > > /* phys_to_ttbr() zeros lower 2 bits of ttbr with 52-bit PA */ > phys_addr_t ttbr1 = phys_to_ttbr(virt_to_phys(pgdp)); > @@ -171,7 +173,15 @@ static inline void cpu_replace_ttbr1(pgd_t *pgdp, pgd_t *idmap) > replace_phys = (void *)__pa_symbol(idmap_cpu_replace_ttbr1); > > __cpu_install_idmap(idmap); > + > + /* > + * We really don't want to take *any* exceptions while TTBR1 is > + * in the process of being replaced so mask everything. > + */ > + daif = local_daif_save(); > replace_phys(ttbr1); > + local_daif_restore(daif); > + > cpu_uninstall_idmap(); > } > > diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S > index b9ecbbae1e1a..066fa60b93d2 100644 > --- a/arch/arm64/mm/proc.S > +++ b/arch/arm64/mm/proc.S > @@ -189,16 +189,12 @@ SYM_FUNC_END(cpu_do_resume) > * called by anything else. It can only be executed from a TTBR0 mapping. > */ > SYM_TYPED_FUNC_START(idmap_cpu_replace_ttbr1) > - save_and_disable_daif flags=x2 > - > __idmap_cpu_set_reserved_ttbr1 x1, x3 > > offset_ttbr1 x0, x3 > msr ttbr1_el1, x0 > isb > > - restore_daif x2 > - > ret > SYM_FUNC_END(idmap_cpu_replace_ttbr1) > .popsection > -- > 2.30.2 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel