From: Mark Rutland <mark.rutland@arm.com>
To: Will Deacon <will@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
Ard Biesheuvel <ardb@kernel.org>,
Sami Tolvanen <samitolvanen@google.com>
Subject: Re: [PATCH] arm64: scs: Remove redundant save/restore of SCS SP on entry to/from EL0
Date: Fri, 13 Mar 2026 14:18:10 +0000 [thread overview]
Message-ID: <abQcohPWkJ06mBBI@J2N7QTR9R3> (raw)
In-Reply-To: <20260313123220.29878-1-will@kernel.org>
On Fri, Mar 13, 2026 at 12:32:19PM +0000, Will Deacon wrote:
> When returning to userspace, the SCS is empty and so the SCS SP just
> points to the base address of the SCS page.
>
> Rather than saving and restoring this address in the current task, we
> can simply restore the SCS SP to point at the base of the stack on entry
> to EL1 from EL0.
>
> Cc: Ard Biesheuvel <ardb@kernel.org>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Sami Tolvanen <samitolvanen@google.com>
> Signed-off-by: Will Deacon <will@kernel.org>
I think this works either way, so:
Acked-by: Mark Rutland <mark.rutland@arm.com>
Mark.
> ---
> arch/arm64/include/asm/scs.h | 8 ++++++++
> arch/arm64/kernel/entry.S | 4 +---
> 2 files changed, 9 insertions(+), 3 deletions(-)
>
> I just spotted this by inspection when I was hacking on our exception
> entry code.
>
> diff --git a/arch/arm64/include/asm/scs.h b/arch/arm64/include/asm/scs.h
> index 0fbc2e7867d3..a15a2968e7b6 100644
> --- a/arch/arm64/include/asm/scs.h
> +++ b/arch/arm64/include/asm/scs.h
> @@ -10,6 +10,11 @@
> #ifdef CONFIG_SHADOW_CALL_STACK
> scs_sp .req x18
>
> + .macro scs_load_current_base
> + get_current_task scs_sp
> + ldr scs_sp, [scs_sp, #TSK_TI_SCS_BASE]
> + .endm
> +
> .macro scs_load_current
> get_current_task scs_sp
> ldr scs_sp, [scs_sp, #TSK_TI_SCS_SP]
> @@ -19,6 +24,9 @@
> str scs_sp, [\tsk, #TSK_TI_SCS_SP]
> .endm
> #else
> + .macro scs_load_current_base
> + .endm
> +
> .macro scs_load_current
> .endm
>
> diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
> index f8018b5c1f9a..ab476ba060d1 100644
> --- a/arch/arm64/kernel/entry.S
> +++ b/arch/arm64/kernel/entry.S
> @@ -273,7 +273,7 @@ alternative_if ARM64_HAS_ADDRESS_AUTH
> alternative_else_nop_endif
> 1:
>
> - scs_load_current
> + scs_load_current_base
> .else
> add x21, sp, #PT_REGS_SIZE
> get_current_task tsk
> @@ -378,8 +378,6 @@ alternative_if ARM64_WORKAROUND_845719
> alternative_else_nop_endif
> #endif
> 3:
> - scs_save tsk
> -
> /* Ignore asynchronous tag check faults in the uaccess routines */
> ldr x0, [tsk, THREAD_SCTLR_USER]
> clear_mte_async_tcf x0
> --
> 2.53.0.851.ga537e3e6e9-goog
>
next prev parent reply other threads:[~2026-03-13 14:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-13 12:32 [PATCH] arm64: scs: Remove redundant save/restore of SCS SP on entry to/from EL0 Will Deacon
2026-03-13 13:26 ` Ard Biesheuvel
2026-03-13 14:18 ` Mark Rutland [this message]
2026-03-13 16:13 ` Sami Tolvanen
2026-03-13 19:42 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=abQcohPWkJ06mBBI@J2N7QTR9R3 \
--to=mark.rutland@arm.com \
--cc=ardb@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=samitolvanen@google.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox