[PATCH v4 1/5] arm64/entry: Unify user mode handling

André Almeida <[email protected]>
Newsgroups org.kernel.vger.linux-arch,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Currently, arm64 has two functions to prepare and handle context switches
from userspace: arm64_syscall_enter_from_user_mode() and
arm64_enter_from_user_mode(). The only difference is that the later calls
rseq_note_user_irq_entry() that sets rseq.event.user_irq as true.

To ensure that futex_fixup_robust_unlock() works correctly, unify the
handling from user mode functions into one that always calls
rseq_note_user_irq_entry().

Other architectures calls irqentry_enter_from_user_mode() for syscalls
and interruptions, that sets rseq.event.user_irq as well.

Signed-off-by: André Almeida <[email protected]>
---
 arch/arm64/kernel/entry-common.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c
index ceb4eb11232a..fd62ee585b52 100644
--- a/arch/arm64/kernel/entry-common.c
+++ b/arch/arm64/kernel/entry-common.c
@@ -62,13 +62,6 @@ static void noinstr arm64_exit_to_kernel_mode(struct pt_regs *regs,
 	irqentry_exit_to_kernel_mode_after_preempt(regs, state);
 }
 
-static __always_inline void arm64_syscall_enter_from_user_mode(struct pt_regs *regs)
-{
-	enter_from_user_mode(regs);
-	mte_disable_tco_entry(current);
-	sme_enter_from_user_mode();
-}
-
 /*
  * Handle IRQ/context state management when entering from user mode.
  * Before this function is called it is not safe to call regular kernel code,
@@ -729,7 +722,7 @@ static void noinstr el0_brk64(struct pt_regs *regs, unsigned long esr)
 
 static void noinstr el0_svc(struct pt_regs *regs)
 {
-	arm64_syscall_enter_from_user_mode(regs);
+	arm64_enter_from_user_mode(regs);
 	cortex_a76_erratum_1463225_svc_handler();
 	fpsimd_syscall_enter();
 	local_daif_restore(DAIF_PROCCTX);
@@ -881,7 +874,7 @@ static void noinstr el0_cp15(struct pt_regs *regs, unsigned long esr)
 
 static void noinstr el0_svc_compat(struct pt_regs *regs)
 {
-	arm64_syscall_enter_from_user_mode(regs);
+	arm64_enter_from_user_mode(regs);
 	cortex_a76_erratum_1463225_svc_handler();
 	local_daif_restore(DAIF_PROCCTX);
 	do_el0_svc_compat(regs);

-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.