mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Linus Walleij <linus.walleij@linaro.org>
To: Dmitry Vyukov <dvyukov@google.com>,
	Oleg Nesterov <oleg@redhat.com>,
	 Russell King <linux@armlinux.org.uk>,
	Kees Cook <kees@kernel.org>,
	 Andy Lutomirski <luto@amacapital.net>,
	Will Drewry <wad@chromium.org>,
	 Frederic Weisbecker <frederic@kernel.org>,
	 "Paul E. McKenney" <paulmck@kernel.org>,
	 Jinjie Ruan <ruanjinjie@huawei.com>,
	Arnd Bergmann <arnd@arndb.de>,  Ard Biesheuvel <ardb@kernel.org>,
	Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	 Linus Walleij <linus.walleij@linaro.org>,
	 Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH v6 13/31] ARM: entry: Create user_mode_enter/exit
Date: Sun, 20 Apr 2025 00:36:00 +0200	[thread overview]
Message-ID: <20250420-arm-generic-entry-v6-13-95f1fcdfeeb2@linaro.org> (raw)
In-Reply-To: <20250420-arm-generic-entry-v6-0-95f1fcdfeeb2@linaro.org>

The callbacks to the context tracking will be repurposed
for several uses that are needed on the IRQ transition
to/from userspace.

Rename the macro, establish call sites in C calling into
the context tracking following the corresponding generic
entry function prototypes, despite the assembly macro
names become a bit long this makes it clear to readers
exactly what is going on and where this call will go.

Drop the ifdefs pertaining to context tracking from
the macro. The C calls we will use have stubs that will
compile these out anyway.

The inversion of the signature of the context tracking
calls are especially confusing since the generic entry
uses the reverse semantics: *enter from* user mode (to
kernel mode) and *exit to* user mode (from kernel mode)
instead of the other way around as the old context tracker
code user_exit_callable() and user_enter_callable()
which have inverted semantics.

Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 arch/arm/include/asm/entry.h   | 14 ++++++++++++++
 arch/arm/kernel/Makefile       |  2 +-
 arch/arm/kernel/entry-armv.S   |  2 +-
 arch/arm/kernel/entry-common.S |  4 ++--
 arch/arm/kernel/entry-header.S | 24 ++++++++++++------------
 arch/arm/kernel/entry.c        | 15 +++++++++++++++
 6 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/arch/arm/include/asm/entry.h b/arch/arm/include/asm/entry.h
new file mode 100644
index 0000000000000000000000000000000000000000..e26f369375ca3cf762f92fb499657a666b223ca2
--- /dev/null
+++ b/arch/arm/include/asm/entry.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __ASM_ENTRY_H__
+#define __ASM_ENTRY_H__
+
+struct pt_regs;
+
+/*
+ * These are copies of generic entry headers so we can transition
+ * to generic entry once they are semantically equivalent.
+ */
+void irqentry_enter_from_user_mode(struct pt_regs *regs);
+void irqentry_exit_to_user_mode(struct pt_regs *regs);
+
+#endif /* __ASM_ENTRY_H__ */
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index 69ddf51081f4791982518d37df60c11211b8955a..dd45c6eb8cbdd2595edc4f26026c12b25dd49717 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -17,7 +17,7 @@ CFLAGS_REMOVE_return_address.o = -pg
 
 # Object file lists.
 
-obj-y		:= elf.o entry-common.o irq.o opcodes.o \
+obj-y		:= elf.o entry.o entry-common.o irq.o opcodes.o \
 		   process.o ptrace.o reboot.o io.o \
 		   setup.o signal.o sigreturn_codes.o \
 		   stacktrace.o sys_arm.o time.o traps.o \
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index ef6a657c8d130663e68acd07226815ce8a3fff7d..93a37437a9520118eff411f009e8f6bd729412fc 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -406,7 +406,7 @@ ENDPROC(__fiq_abt)
 #ifdef CONFIG_TRACE_IRQFLAGS
 	bl	trace_hardirqs_off
 #endif
-	ct_user_exit save = 0
+	asm_irqentry_enter_from_user_mode save = 0
 	.endif
 	.endm
 
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index f1e48002bd3075ea67b5883178583127fa0055c6..ff1dd3169346f3770cad6b7e218f5d74ffc646fe 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -111,7 +111,7 @@ ENTRY(ret_to_user_from_irq)
 no_work_pending:
 	asm_trace_hardirqs_on save = 0
 
-	ct_user_enter save = 0
+	asm_irqentry_exit_to_user_mode save = 0
 
 #ifdef CONFIG_GCC_PLUGIN_STACKLEAK
 	bl	stackleak_erase_on_task_stack
@@ -191,7 +191,7 @@ ENTRY(vector_swi)
 	alignment_trap r10, ip, cr_alignment
 	asm_trace_hardirqs_on save=0
 	enable_irq_notrace
-	ct_user_exit save=0
+	asm_irqentry_enter_from_user_mode save = 0
 
 	/*
 	 * Get the system call number.
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 52b4fa97226dbfa4b55aca8eaf74ae24e1e220f8..fb5bb019199b2871e29e306a29bea8fdf47dd7f3 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -362,31 +362,31 @@ ALT_UP_B(.L1_\@)
 	.endm
 
 /*
- * Context tracking subsystem.  Used to instrument transitions
+ * Context tracking and other mode transitions. Used to instrument transitions
  * between user and kernel mode.
- */
-	.macro ct_user_exit, save = 1
-#ifdef CONFIG_CONTEXT_TRACKING_USER
+*/
+	.macro asm_irqentry_enter_from_user_mode, save = 1
 	.if	\save
 	stmdb   sp!, {r0-r3, ip, lr}
-	bl	user_exit_callable
+	mov	r0, sp				@ regs
+	bl	irqentry_enter_from_user_mode
 	ldmia	sp!, {r0-r3, ip, lr}
 	.else
-	bl	user_exit_callable
+	mov	r0, sp				@ regs
+	bl	irqentry_enter_from_user_mode
 	.endif
-#endif
 	.endm
 
-	.macro ct_user_enter, save = 1
-#ifdef CONFIG_CONTEXT_TRACKING_USER
+	.macro asm_irqentry_exit_to_user_mode, save = 1
 	.if	\save
 	stmdb   sp!, {r0-r3, ip, lr}
-	bl	user_enter_callable
+	mov	r0, sp				@ regs
+	bl	irqentry_exit_to_user_mode
 	ldmia	sp!, {r0-r3, ip, lr}
 	.else
-	bl	user_enter_callable
+	mov	r0, sp				@ regs
+	bl	irqentry_exit_to_user_mode
 	.endif
-#endif
 	.endm
 
 /*
diff --git a/arch/arm/kernel/entry.c b/arch/arm/kernel/entry.c
new file mode 100644
index 0000000000000000000000000000000000000000..8b2e8ea66c1376759d6c0c14aad8728895b3ff1e
--- /dev/null
+++ b/arch/arm/kernel/entry.c
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <asm/entry.h>
+#include <linux/context_tracking.h>
+
+noinstr void irqentry_enter_from_user_mode(struct pt_regs *regs)
+{
+	/* This context tracking call has inverse naming */
+	user_exit_callable();
+}
+
+noinstr void irqentry_exit_to_user_mode(struct pt_regs *regs)
+{
+	/* This context tracking call has inverse naming */
+	user_enter_callable();
+}

-- 
2.49.0


  parent reply	other threads:[~2025-04-19 22:36 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-19 22:35 [PATCH v6 00/31] ARM: Switch to generic entry Linus Walleij
2025-04-19 22:35 ` [PATCH v6 01/31] ARM: Prepare includes for " Linus Walleij
2025-04-19 22:35 ` [PATCH v6 02/31] ARM: ptrace: Split report_syscall() Linus Walleij
2025-04-19 22:35 ` [PATCH v6 03/31] ARM: entry: Skip ret_slow_syscall label Linus Walleij
2025-04-19 22:35 ` [PATCH v6 04/31] ARM: process: Rewrite ret_from_fork i C Linus Walleij
2025-04-19 22:35 ` [PATCH v6 05/31] ARM: process: Remove local restart Linus Walleij
2025-04-19 22:35 ` [PATCH v6 06/31] ARM: entry: Invoke syscalls using C Linus Walleij
2025-04-19 22:35 ` [PATCH v6 07/31] ARM: entry: Rewrite two asm calls in C Linus Walleij
2025-04-19 22:35 ` [PATCH v6 08/31] ARM: entry: Move trace entry to C function Linus Walleij
2025-04-19 22:35 ` [PATCH v6 09/31] ARM: entry: save the syscall sp in thread_info Linus Walleij
2025-04-19 22:35 ` [PATCH v6 10/31] ARM: entry: move all tracing invocation to C Linus Walleij
2025-04-19 22:35 ` [PATCH v6 11/31] ARM: entry: Merge the common and trace entry code Linus Walleij
2025-04-19 22:35 ` [PATCH v6 12/31] ARM: entry: Rename syscall invocation Linus Walleij
2025-04-19 22:36 ` Linus Walleij [this message]
2025-04-19 22:36 ` [PATCH v6 14/31] ARM: entry: Drop trace argument from usr_entry macro Linus Walleij
2025-04-19 22:36 ` [PATCH v6 15/31] ARM: entry: Separate call path for syscall SWI entry Linus Walleij
2025-04-19 22:36 ` [PATCH v6 16/31] ARM: entry: Drop argument to asm_irqentry macros Linus Walleij
2025-04-19 22:36 ` [PATCH v6 17/31] ARM: entry: Implement syscall_exit_to_user_mode() Linus Walleij
2025-04-19 22:36 ` [PATCH v6 18/31] ARM: entry: Drop the superfast ret_fast_syscall Linus Walleij
2025-04-19 22:36 ` [PATCH v6 19/31] ARM: entry: Remove fast and offset register restore Linus Walleij
2025-04-19 22:36 ` [PATCH v6 20/31] ARM: entry: Untangle ret_fast_syscall/to_user Linus Walleij
2025-04-19 22:36 ` [PATCH v6 21/31] ARM: entry: Do not double-call exit functions Linus Walleij
2025-04-19 22:36 ` [PATCH v6 22/31] ARM: entry: Move work processing to C Linus Walleij
2025-04-19 22:36 ` [PATCH v6 23/31] ARM: entry: Stop exiting syscalls like IRQs Linus Walleij
2025-04-19 22:36 ` [PATCH v6 24/31] ARM: entry: Complete syscall and IRQ transition to C Linus Walleij
2025-04-19 22:36 ` [PATCH v6 25/31] ARM: entry: Create irqentry calls from kernel mode Linus Walleij
2025-04-19 22:36 ` [PATCH v6 26/31] ARM: entry: Move in-kernel hardirq tracing to C Linus Walleij
2025-04-19 22:36 ` [PATCH v6 27/31] ARM: irq: Add irqstack helper Linus Walleij
2025-04-19 22:36 ` [PATCH v6 28/31] ARM: entry: Convert to generic entry Linus Walleij
2025-04-19 22:36 ` [PATCH v6 29/31] ARM: entry: Handle dabt, pabt, and und as interrupts Linus Walleij
2025-04-19 22:36 ` [PATCH v6 30/31] ARM: entry: Block IRQs in early IRQ context Linus Walleij
2025-04-19 22:36 ` [PATCH v6 31/31] ARM: entry: Reimplement local restart in C Linus Walleij

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=20250420-arm-generic-entry-v6-13-95f1fcdfeeb2@linaro.org \
    --to=linus.walleij@linaro.org \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=dvyukov@google.com \
    --cc=frederic@kernel.org \
    --cc=kees@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=luto@amacapital.net \
    --cc=oleg@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=ruanjinjie@huawei.com \
    --cc=tglx@linutronix.de \
    --cc=viro@zeniv.linux.org.uk \
    --cc=wad@chromium.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

all inboxes | Powered by JetHome®