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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84E7EC3DA49 for ; Thu, 25 Jul 2024 15:46:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 195856B0085; Thu, 25 Jul 2024 11:46:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1464E6B0088; Thu, 25 Jul 2024 11:46:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 033B26B0089; Thu, 25 Jul 2024 11:46:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id D3CE36B0085 for ; Thu, 25 Jul 2024 11:46:49 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 98AE1A261A for ; Thu, 25 Jul 2024 15:46:49 +0000 (UTC) X-FDA: 82378702938.11.FA517A6 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf14.hostedemail.com (Postfix) with ESMTP id CBFF310002D for ; Thu, 25 Jul 2024 15:46:47 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=none; spf=pass (imf14.hostedemail.com: domain of Dave.Martin@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=Dave.Martin@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=1721922359; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rfAR+IAWz/eiDHaqaOfK9n5VsONUXysP51/k6ho5FzM=; b=26CM41ksSiKFi2i4fkmD3KPgXt2lYB5CLi6EZmlRaql4ozphg1SciuG5KT/iZlfr3tjRE/ SYpUGrW0CorfG1p4blSy62VVBYj5DojJkDBFLQtg4Mje1F1Nj1Tk2XtWadX6RjsWxnCaSS 1ggO6qXPcpCNGlTlxY3kv4ZiWRZBRiA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721922359; a=rsa-sha256; cv=none; b=u6x90GPRb1dewAVaIqHGLL7ytd4XFHvP75sb00rLQM1rKsnwgeHiXjFSegWoan7uDTP7QO Obq6nYKJ8/tjifLYKHe0VgSWFuf8WxJdaVYblgF1CiJT7TOUlU3ofYGnlBoXrOt/xt06oF gSCVB237Fxvyo4bro3REuHDqiEqe+mc= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=none; spf=pass (imf14.hostedemail.com: domain of Dave.Martin@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=Dave.Martin@arm.com; dmarc=pass (policy=none) header.from=arm.com 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 587921476; Thu, 25 Jul 2024 08:47:12 -0700 (PDT) Received: from e133380.arm.com (e133380.arm.com [10.1.197.55]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2F4C63F766; Thu, 25 Jul 2024 08:46:43 -0700 (PDT) Date: Thu, 25 Jul 2024 16:46:40 +0100 From: Dave Martin To: Joey Gouly Cc: linux-arm-kernel@lists.infradead.org, akpm@linux-foundation.org, aneesh.kumar@kernel.org, aneesh.kumar@linux.ibm.com, bp@alien8.de, broonie@kernel.org, catalin.marinas@arm.com, christophe.leroy@csgroup.eu, dave.hansen@linux.intel.com, hpa@zytor.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, maz@kernel.org, mingo@redhat.com, mpe@ellerman.id.au, naveen.n.rao@linux.ibm.com, npiggin@gmail.com, oliver.upton@linux.dev, shuah@kernel.org, szabolcs.nagy@arm.com, tglx@linutronix.de, will@kernel.org, x86@kernel.org, kvmarm@lists.linux.dev Subject: Re: [PATCH v4 06/29] arm64: context switch POR_EL0 register Message-ID: References: <20240503130147.1154804-1-joey.gouly@arm.com> <20240503130147.1154804-7-joey.gouly@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240503130147.1154804-7-joey.gouly@arm.com> X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: CBFF310002D X-Stat-Signature: rbsheenaodb1cdbcr3un6adof8oorspq X-HE-Tag: 1721922407-938575 X-HE-Meta: U2FsdGVkX1/afv1p4L5sAE27We/qnLe3xe/ibVr4DzfCj0xlAtLbjbI8I9ZYv8nyoR3W5siMW0LVd9fk5/gAp3ydxSgk5ci9rRJ8pSNNhXkNjjvc/Q50io+W9HuBGduHvhXW8aXod5hUyDXOy+QVMcU+NQeATYfNZKlTrQS7U+m6mbTmTcgKz4rOUIpjUTPKP2jYAVyn3lJ6jeTV8MswPVxAj8d+Libp8lJ+WC4YwbdZLKZR+Y5atgw2YCGJKveuXYM/TbtZGek8NxQd6Nc12hyN24AWdHER5FwPjfxr9fCprGfX8eGEgOnjRTuud+WZIlQiUC7rORvFpLwsITI4TXsJPD54/t/rcuJnfpmUCjVodYrLqMW4GjfMjOgBxpYxZ0XdzkgCVZi4R9GxSM37h3H3kB+zuu8g/mJELpDSeuFW0b268o0eqgaYeNjEsAsR+FCmLyFtXgeAUMEJXsp7x1C2Y1LIyaRV+fdSxM8CU1R2PcCM7EZGjLTkaQqYG87YmuakQTQHBCsjOOHjvjhHCIUr5nMUgTUUWQv2StC0Kk0MQdESnx/D6JPJlbQxI+mspYI8Yxb3MBx79lLTic9n9sQssaVy6PEduwPnsxIStavFkBDtoBRtbMSb0HVHSq1oSc8mZnsYjDbxbaqMdVbhtcrBRJ6RafSroc7X6n7Moh0Yc9Xd6VpL35a+rJNmSvP13EdlYzRb8nZFcx79kQ3sLyhyA9TtxQii3Mzh03VwCCc6Y8XC9AlMMf9ACjfX2tRyoaj15jBABy1hLGQ5SMqbW4Mjh/SVNNg+FPPvudqcnhZTa9mmUepdwzdqFHcw6/E/hach+xv/6bBlu3OtAtKsZFK/apLJT/8nYiOUtTvJPD5ik2T1hR7vf3ATZW6I5FKLxD/7gKjAHbSvU4bouQ9tWiK6t5+fH+t/G8NhKpw+JRfRj8BWsXGJRUOQS/Kw7EEFxMFxflpcQOeo7uj2Bdk 2LSPHMd6 B4cT3aEUfnMkHQGf4pHiAuyDUg7PgeiUDcHrYoIWFz/hTtNWcEMd8EcmY3H2bino6cRLqKESZDrNH0JvZtqSrlNjJpuJQal7h9EhQ8DgN/Pm/tkVH1gkkeDf8GYkVqfhyYP4GZ4IG1K19eKAS02OkpEppBceANZEOJ24rDQdWE99DrgFBSAJdGJLZjVgZ8vaXMJeEpSDowo7/DiL2o4m1uDs4dKQwxsGJjh540hpiiqkjEg4Z6ipHJzOFWzgTWVUmhNTm2JxwelwiR/5QTnKcG9xB0Tz0CmRfnO1FfwBGGB+FAC/TwtaeikdnJw== 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: On Fri, May 03, 2024 at 02:01:24PM +0100, Joey Gouly wrote: > POR_EL0 is a register that can be modified by userspace directly, > so it must be context switched. > > Signed-off-by: Joey Gouly > Cc: Catalin Marinas > Cc: Will Deacon > --- > arch/arm64/include/asm/cpufeature.h | 6 ++++++ > arch/arm64/include/asm/processor.h | 1 + > arch/arm64/include/asm/sysreg.h | 3 +++ > arch/arm64/kernel/process.c | 28 ++++++++++++++++++++++++++++ > 4 files changed, 38 insertions(+) [...] > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c > index 4ae31b7af6c3..0ffaca98bed6 100644 > --- a/arch/arm64/kernel/process.c > +++ b/arch/arm64/kernel/process.c > @@ -271,12 +271,23 @@ static void flush_tagged_addr_state(void) > clear_thread_flag(TIF_TAGGED_ADDR); > } > > +static void flush_poe(void) > +{ > + if (!system_supports_poe()) > + return; > + > + write_sysreg_s(POR_EL0_INIT, SYS_POR_EL0); > + /* ISB required for kernel uaccess routines when chaning POR_EL0 */ > + isb(); See my comment on permission_overlay_switch(), below. However, exec is slower path code, so including the ISB may be better here than leaving it for the caller to worry about. > +} > + > void flush_thread(void) > { > fpsimd_flush_thread(); > tls_thread_flush(); > flush_ptrace_hw_breakpoint(current); > flush_tagged_addr_state(); > + flush_poe(); > } > > void arch_release_task_struct(struct task_struct *tsk) > @@ -371,6 +382,9 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args) > if (system_supports_tpidr2()) > p->thread.tpidr2_el0 = read_sysreg_s(SYS_TPIDR2_EL0); > > + if (system_supports_poe()) > + p->thread.por_el0 = read_sysreg_s(SYS_POR_EL0); > + Was POR_EL0 ever reset to something sensible at all? Does it matter? (I couldn't find this, but may have missed it.) > if (stack_start) { > if (is_compat_thread(task_thread_info(p))) > childregs->compat_sp = stack_start; > @@ -495,6 +509,19 @@ static void erratum_1418040_new_exec(void) > preempt_enable(); > } > > +static void permission_overlay_switch(struct task_struct *next) > +{ > + if (!system_supports_poe()) > + return; > + > + current->thread.por_el0 = read_sysreg_s(SYS_POR_EL0); > + if (current->thread.por_el0 != next->thread.por_el0) { > + write_sysreg_s(next->thread.por_el0, SYS_POR_EL0); > + /* ISB required for kernel uaccess routines when chaning POR_EL0 */ > + isb(); Do we really need an extra ISB slap in the middle of context switch? (i.e., should any uaccess ever happen until context switch is completed, and so can we coalesce this ISB with a later one?) > + } > +} > + > /* > * __switch_to() checks current->thread.sctlr_user as an optimisation. Therefore > * this function must be called with preemption disabled and the update to > @@ -530,6 +557,7 @@ struct task_struct *__switch_to(struct task_struct *prev, > ssbs_thread_switch(next); > erratum_1418040_thread_switch(next); > ptrauth_thread_switch_user(next); > + permission_overlay_switch(next); > > /* > * Complete any pending TLB or cache maintenance on this CPU in case [...] Cheers ---Dave