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 EACE2C4332F for ; Mon, 11 Dec 2023 18:53:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 837896B01A7; Mon, 11 Dec 2023 13:53:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7C00C6B01A8; Mon, 11 Dec 2023 13:53:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 639FC6B01A9; Mon, 11 Dec 2023 13:53:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 5019D6B01A7 for ; Mon, 11 Dec 2023 13:53:24 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 225FBC0767 for ; Mon, 11 Dec 2023 18:53:24 +0000 (UTC) X-FDA: 81555435528.23.5357E7D Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf22.hostedemail.com (Postfix) with ESMTP id D2BAAC0012 for ; Mon, 11 Dec 2023 18:53:21 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none); spf=pass (imf22.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=cmarinas@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702320802; 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=lW2kH1iQkLdMTTn9nXJ4FGFKVFSpknuu6CavE+Se9+o=; b=fp/mPlhd0ogL0FgV+GU2KaKBcF35f5pL9qULeQH8MRrj7Dc83oRYef7ht5c655eq1WzQLU dHYJmOy5NU6o8ZLY0wtK2e0izJhJldLusBWAvUYy+YWsunuRq8MysxPQgI/CDYD6xHCjXb dSk+G2463EscKaDmCbqKM/cgoDX32LU= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=arm.com (policy=none); spf=pass (imf22.hostedemail.com: domain of cmarinas@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=cmarinas@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702320802; a=rsa-sha256; cv=none; b=UOL1tAZgKa84ClGS2qDDBRnaRhp9z7RAsbiZuZ0EOTMJ+7zb0tq/FD9YhLL2cptv66oT6S 8Z2ajOm/kI8U7W5695wHnD15bwshuOPYU/TIZSbAOGnZjDffOgRC12d69RZN7quMgjeh4G qfw8Rrfr7x59M0WU0d6A6dTq9wTrIpw= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 182C1CE11BB; Mon, 11 Dec 2023 18:53:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E447C433C9; Mon, 11 Dec 2023 18:53:15 +0000 (UTC) Date: Mon, 11 Dec 2023 18:53:13 +0000 From: Catalin Marinas To: Joey Gouly Cc: linux-arm-kernel@lists.infradead.org, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, broonie@kernel.org, dave.hansen@linux.intel.com, maz@kernel.org, oliver.upton@linux.dev, shuah@kernel.org, will@kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, James Morse , Suzuki K Poulose , Zenghui Yu , Szabolcs Nagy Subject: Re: [PATCH v3 15/25] arm64: add POE signal support Message-ID: References: <20231124163510.1835740-1-joey.gouly@arm.com> <20231124163510.1835740-16-joey.gouly@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231124163510.1835740-16-joey.gouly@arm.com> X-Rspamd-Queue-Id: D2BAAC0012 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: m4qdmoiceb4gosechuwb4mcb4aaeh9dg X-HE-Tag: 1702320801-120049 X-HE-Meta: U2FsdGVkX1/nHz1SyEKJzbszWwpaUUlxIUBqlFTVDYhlDwQ7SmYRCN03/ZNeVysAuSOxOdN2VDhUDWJGpQhjTylvN0alEh7ZPjtLiPchzmZxXvPKMHyhRj0POESA5deDUJZkE5yV5iGDSJnyKE9rl3ge2JapPMycZJNjsahxsgtRH66fSom5iLqfBfF0B0mzKd95yYb925OaWWOLcHdXh0/xbWpqYMzMx6txwZ5amvVaxLGk7th5jOa2DJDU/WseEylT7F1i7YGXlfUEV9TfLQzSCqCGfAkVLTAiYDRWyFGv2egRqWEN432XJFD+MMLU3a4IKacQ/NY7w6pJk1E1csSPhfE5rxSmmyjjSe+h3GyGSrVUL6v+g4nHHafPTsX7wf6d8akAI6cdTeyN29TsQe0KwCdNSyAg/Dv+DgE6+E+Iknu3J+KRWhkFWvbavJ/mHDLynVKR830NSyhxWEPCSoaeufW6X8zOzGC0/R73tax5GAZPJa8tMDAWBfdNhRj+D+EibMbyDSK21vfcDigOUwd3990HHad0uRCgbfrxc9rXyaMCoFSbyD/1j+4bOq87mkPbVOJj0Rar3MtPKd1f7pGK40pTaZfbcIs8K8GY2QJ/VVrZOZDzyQYFKnO1Sxv95GaABx1DmXBCdW2DT95lzh8kYJySHCCaO6q5jSuz/a1JRylBnsdfhXBvj96uEsRzTAb3BcfWUZIKdmqF86T43yuo2xkqt9uAz72AjmtPRd9MCJ+/VgKkj6JlGIpvtanTpXxenvsdKh5dP4k7MdRgBkqLR1XqlhHMylM1hs2Q1ommeS7BoBfp+ONiw4TJ0zEbpqwp8cHvabKbheLGdDuKoHN1ljlJUHEFfQnBbLkaGrUtn0Q19PVcynTIWCnj9IPxrc2ohgpE3gMCHFMptwQyPgN1hQrl3GltTQ5hsHGeaushn+s0HaJ8OMfYjguM6GtolFxMMXFp/XtgOPkX8iB 1/M6WSaR 5xF97an3nJYlAidnNX7lLkLWryTiv/PXAUl4m7egyo/qReV6OxrMdqlmo4QhrlypmpVo5/TvDeQIw1/UunQZJJ+sHXzhBbN46pRpnMBwmDfct6ggjcczlmUZPRxWOlG+8KswzIe3BL5roWnbPTPLFNV9JmD0/VhaVCWZgo3sumQZTGGQFbaQN1IaGEDnj7Kn0axcnnTivgnv/EudiOt4KP4b1fu9JnMGk4rS8BU8vRCvdel/UEjt4a2q6gRj40ErHiHWVskry0+/Nqq6KG8BoJ7OP9Fil5lIloZpjs5qPki5M21n3CGPLnViVajvTfuXcm3jjg3ew1k1R7rTEx+Dg4QhjyL4k0YociUl2SMN+dVfbJ5OUTL0pAE60n0MHNRwo2e3+VfUA2rF6tQc0kBKtYY8FkNJzvuM+pizhe1MACbVYTb8EWqShVCWL4g== 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: + Szabolcs for libc ack (and keeping the full patch quoted below) You should cc Szabolcs when reposting, we need his ack on the UAPI changes. On Fri, Nov 24, 2023 at 04:35:00PM +0000, Joey Gouly wrote: > Add PKEY support to signals, by saving and restoring POR_EL0 from the stackframe. > > Signed-off-by: Joey Gouly > Cc: Catalin Marinas > Cc: Will Deacon > Reviewed-by: Mark Brown > --- > arch/arm64/include/uapi/asm/sigcontext.h | 7 ++++ > arch/arm64/kernel/signal.c | 51 ++++++++++++++++++++++++ > 2 files changed, 58 insertions(+) > > diff --git a/arch/arm64/include/uapi/asm/sigcontext.h b/arch/arm64/include/uapi/asm/sigcontext.h > index f23c1dc3f002..cef85eeaf541 100644 > --- a/arch/arm64/include/uapi/asm/sigcontext.h > +++ b/arch/arm64/include/uapi/asm/sigcontext.h > @@ -98,6 +98,13 @@ struct esr_context { > __u64 esr; > }; > > +#define POE_MAGIC 0x504f4530 > + > +struct poe_context { > + struct _aarch64_ctx head; > + __u64 por_el0; > +}; > + > /* > * extra_context: describes extra space in the signal frame for > * additional structures that don't fit in sigcontext.__reserved[]. > diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c > index 0e8beb3349ea..379f364005bf 100644 > --- a/arch/arm64/kernel/signal.c > +++ b/arch/arm64/kernel/signal.c > @@ -62,6 +62,7 @@ struct rt_sigframe_user_layout { > unsigned long zt_offset; > unsigned long extra_offset; > unsigned long end_offset; > + unsigned long poe_offset; > }; > > #define BASE_SIGFRAME_SIZE round_up(sizeof(struct rt_sigframe), 16) > @@ -182,6 +183,8 @@ struct user_ctxs { > u32 za_size; > struct zt_context __user *zt; > u32 zt_size; > + struct poe_context __user *poe; > + u32 poe_size; > }; > > static int preserve_fpsimd_context(struct fpsimd_context __user *ctx) > @@ -227,6 +230,20 @@ static int restore_fpsimd_context(struct user_ctxs *user) > return err ? -EFAULT : 0; > } > > +static int restore_poe_context(struct user_ctxs *user) > +{ > + u64 por_el0; > + int err = 0; > + > + if (user->poe_size != sizeof(*user->poe)) > + return -EINVAL; > + > + __get_user_error(por_el0, &(user->poe->por_el0), err); > + if (!err) > + write_sysreg_s(por_el0, SYS_POR_EL0); > + > + return err; > +} > > #ifdef CONFIG_ARM64_SVE > > @@ -590,6 +607,7 @@ static int parse_user_sigframe(struct user_ctxs *user, > user->tpidr2 = NULL; > user->za = NULL; > user->zt = NULL; > + user->poe = NULL; > > if (!IS_ALIGNED((unsigned long)base, 16)) > goto invalid; > @@ -640,6 +658,17 @@ static int parse_user_sigframe(struct user_ctxs *user, > /* ignore */ > break; > > + case POE_MAGIC: > + if (!system_supports_poe()) > + goto invalid; > + > + if (user->poe) > + goto invalid; > + > + user->poe = (struct poe_context __user *)head; > + user->poe_size = size; > + break; > + > case SVE_MAGIC: > if (!system_supports_sve() && !system_supports_sme()) > goto invalid; > @@ -812,6 +841,9 @@ static int restore_sigframe(struct pt_regs *regs, > if (err == 0 && system_supports_sme2() && user.zt) > err = restore_zt_context(&user); > > + if (err == 0 && system_supports_poe() && user.poe) > + err = restore_poe_context(&user); > + > return err; > } > > @@ -928,6 +960,13 @@ static int setup_sigframe_layout(struct rt_sigframe_user_layout *user, > } > } > > + if (system_supports_poe()) { > + err = sigframe_alloc(user, &user->poe_offset, > + sizeof(struct poe_context)); > + if (err) > + return err; > + } > + > return sigframe_alloc_end(user); > } > > @@ -968,6 +1007,15 @@ static int setup_sigframe(struct rt_sigframe_user_layout *user, > __put_user_error(current->thread.fault_code, &esr_ctx->esr, err); > } > > + if (system_supports_poe() && err == 0 && user->poe_offset) { > + struct poe_context __user *poe_ctx = > + apply_user_offset(user, user->poe_offset); > + > + __put_user_error(POE_MAGIC, &poe_ctx->head.magic, err); > + __put_user_error(sizeof(*poe_ctx), &poe_ctx->head.size, err); > + __put_user_error(read_sysreg_s(SYS_POR_EL0), &poe_ctx->por_el0, err); > + } > + > /* Scalable Vector Extension state (including streaming), if present */ > if ((system_supports_sve() || system_supports_sme()) && > err == 0 && user->sve_offset) { > @@ -1119,6 +1167,9 @@ static void setup_return(struct pt_regs *regs, struct k_sigaction *ka, > sme_smstop(); > } > > + if (system_supports_poe()) > + write_sysreg_s(POR_EL0_INIT, SYS_POR_EL0); > + > if (ka->sa.sa_flags & SA_RESTORER) > sigtramp = ka->sa.sa_restorer; > else > -- > 2.25.1