From patchwork Fri Apr 11 09:16:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Brodsky X-Patchwork-Id: 14047906 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 499E3C369A2 for ; Fri, 11 Apr 2025 09:17:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF80928019D; Fri, 11 Apr 2025 05:17:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C89F528019B; Fri, 11 Apr 2025 05:17:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A361628019D; Fri, 11 Apr 2025 05:17:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8177C28019B for ; Fri, 11 Apr 2025 05:17:31 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 194AD1421DF for ; Fri, 11 Apr 2025 09:17:32 +0000 (UTC) X-FDA: 83321209944.18.83FF72A Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf06.hostedemail.com (Postfix) with ESMTP id 833BB180005 for ; Fri, 11 Apr 2025 09:17:30 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of kevin.brodsky@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=kevin.brodsky@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744363050; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kfkzdaySghlKYvqTb+hEmk4OPnsFL6Vuh0dxNa6E2UQ=; b=0G1GhdLj7Ax3oUzdUhPFXwDnHkoxfs8fa4yiiFcQ5C4E8cOt3vEmozLB5aMxN1YWCn5Ist El+I7rB9Yh7QG9rPY55GAamA9/YCpSn9Tw8hrOdYpHxZZJPuZiiN9yq/cPl8zOzouxZCZb x8XU4PQG5ZL1mk65N1K8DRXuLjDE5x4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=none; spf=pass (imf06.hostedemail.com: domain of kevin.brodsky@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=kevin.brodsky@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744363050; a=rsa-sha256; cv=none; b=Oa8GGHFUPPSDn2PaDHc+D4Pkqb7OfjPkquvrCRNk9Vu+NHKp7KeoDHGq/x9/omjDlYwc/R u82j/vxdV8Tq+Aqw2U/k4fpn/Gb7LYkfevb1SYkYlRFKXB83xKGLVFJjf6ik44Pczetmyt 7Sm+fNHumU/Gh3zTGwK4VWdhnnl+Mj0= 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 8B014106F; Fri, 11 Apr 2025 02:17:29 -0700 (PDT) Received: from e123572-lin.arm.com (e123572-lin.cambridge.arm.com [10.1.194.54]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 042073F6A8; Fri, 11 Apr 2025 02:17:25 -0700 (PDT) From: Kevin Brodsky To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Kevin Brodsky , Andrew Morton , Mark Brown , Catalin Marinas , Dave Hansen , David Hildenbrand , Ira Weiny , Jann Horn , Jeff Xu , Joey Gouly , Kees Cook , Linus Walleij , Andy Lutomirski , Marc Zyngier , Peter Zijlstra , Pierre Langlois , Quentin Perret , Rick Edgecombe , "Mike Rapoport (IBM)" , Ryan Roberts , Thomas Gleixner , Will Deacon , Matthew Wilcox , Qi Zheng , linux-arm-kernel@lists.infradead.org, x86@kernel.org Subject: [RFC PATCH v4 08/18] arm64: Context-switch POR_EL1 Date: Fri, 11 Apr 2025 10:16:21 +0100 Message-ID: <20250411091631.954228-9-kevin.brodsky@arm.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20250411091631.954228-1-kevin.brodsky@arm.com> References: <20250411091631.954228-1-kevin.brodsky@arm.com> MIME-Version: 1.0 X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 833BB180005 X-Stat-Signature: u5aoen9dmj84ke6aau7ht6mc3de8p7jw X-Rspam-User: X-HE-Tag: 1744363050-574735 X-HE-Meta: U2FsdGVkX1+FqAbsHTUEENZz18xeyfkIu6bme94osnS1jIxjp7tSDE6z9k2p1pJQiYks/Mr2JgFq2nVwvST6A1SAXTD2Spm3//Dp6j9tD0epGToMAGRWpjFAW94f3PnIWtWPgAlUEvz+5xrPktFEwBp9gLMONNLWjfPEIDc6bDJLdyseykEx8Rl7FKNbN5sNhTIVR8hBcBLsQvasJRXWfedEJT7up+PuU6hKiVd0sZNnsLEcRJ+R/v0xawzdBScu253t5toElcbNZedZ8ZWM2Ua4c3HK1IobryEzYwyhF4cY+uSI+7FikLSsuibqN1kbT+NS0GADHYWQGuU041vRoGrw9fz1hEpUO+taAsCUlzm34QE10aVr7JGmsBP3NEfgUaqcANl1dzc3KPRvK7GD0PonASf98ts2AdZ/7uPTgz0xnSU15IK/pDEYkGF6a8RaOZd4fVfhhaqFdI6Mqt9wTaI8HK4MeL2GqeViFf97gS6xvFdsRMIBfUqWSmyqzXkGT2geEedtwDW5WOejsnK9Abo/cDQrb4U+BUBkUV0KSFgQOol669a1BmV8UsHKj8cquwsP0Jr4wQtBKl9vzs4d7/Ottt+LyUyO8Dhp4GwLK+9oql7QwutsWQFWuFt1xZTTF3ZfYoNy3xYGl4V8AwJOxDiAD1QUs6R5A8fo4HuruCuIG10cV133xyQzLxdAo9l0kNfD+5Xu3CCQDiL9Ac2y9FY6+wXURSOt2WqW0zS5oXEN/8JSar5dNgUuX4kp/i+o/Fjxn94uL96QaIv6q4WTVCu1bBu2a+IgtQ9I6qzi6OSppWXwEuReEZ4l43HX+JM0Di/qjn7GyTkrEoIBOl5HzhdrkTNdORqm3VgxQHT8Wf0meJlzUWencGT/5KTKQaiBcYsV13AwLbO6tadP0IBtef5Fsv1BEZGCYMnAq/UXnB4CXV1nHXIC6Tw/vfAeoFDJ9PPaZ4c3P3UzV47ukXZ YprBwDes rApjvwxf+qS8fMiqY3RjFVOD1rOTTZCaOd8yoXDxah1fUu7X5Uaq/QVHHyzzvFqkd3HHDTMzusG2ONkM9n+8OLBNXk9GvWbMTxrGGy8Ip4OtxjRmcy8IMDLg0dRG0rUZgpI1+h8csfV+M3SmiTVw+YRef6m7iOlW+RmYBsZYYhiE/eERB3SrUSdDNYfziY9K2nzPKqjhxYFp0gLU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: POR_EL1 is about to be used by the kpkeys framework, modifying it for (typically small) sections of code. If an exception occurs during that window and scheduling occurs, we must ensure that POR_EL1 is context-switched as needed (saving the old value and restoring the new one). An ISB is needed to ensure the write takes effect, so we skip it if the new value is the same as the old, like for POR_EL0. Signed-off-by: Kevin Brodsky --- arch/arm64/include/asm/processor.h | 1 + arch/arm64/kernel/process.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index 1bf1a3b16e88..0afaf96ca699 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -185,6 +185,7 @@ struct thread_struct { u64 svcr; u64 tpidr2_el0; u64 por_el0; + u64 por_el1; #ifdef CONFIG_ARM64_GCS unsigned int gcs_el0_mode; unsigned int gcs_el0_locked; diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 45a55fe81788..1f38c29b0c95 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -418,6 +418,9 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args) ptrauth_thread_init_kernel(p); + if (system_supports_poe()) + p->thread.por_el1 = read_sysreg_s(SYS_POR_EL1); + if (likely(!args->fn)) { *childregs = *current_pt_regs(); childregs->regs[0] = 0; @@ -639,6 +642,12 @@ static void permission_overlay_switch(struct task_struct *next) if (current->thread.por_el0 != next->thread.por_el0) { write_sysreg_s(next->thread.por_el0, SYS_POR_EL0); } + + current->thread.por_el1 = read_sysreg_s(SYS_POR_EL1); + if (current->thread.por_el1 != next->thread.por_el1) { + write_sysreg_s(next->thread.por_el1, SYS_POR_EL1); + isb(); + } } /*