From: Linus Walleij <linus.walleij@linaro.org>
To: 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>
Subject: [PATCH RFC v2 26/28] ARM: entry: Move in-kernel hardirq tracing to C
Date: Tue, 29 Oct 2024 11:53:06 +0100 [thread overview]
Message-ID: <20241029-arm-generic-entry-v2-26-573519abef38@linaro.org> (raw)
In-Reply-To: <20241029-arm-generic-entry-v2-0-573519abef38@linaro.org>
Move the code tracing hardirqs on/off into the C callbacks
for irqentry_enter_from_kernel_mode() and
irqentry_exit_to_kernel_mode().
The semantic difference occurred is that we alsways check
the PSR_I_BIT to determine if (hard) interrupts were enabled
or not. The assembly has a tweak to avoid this if we are
exiting an IRQ since it is obvious that IRQs must have been
enabled to get there, but for simplicity we just check it
for all exceptions.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
arch/arm/kernel/entry-armv.S | 13 ++++---------
| 19 ++-----------------
arch/arm/kernel/entry.c | 5 +++++
3 files changed, 11 insertions(+), 26 deletions(-)
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 21b11fe199cb..600375f6f5d8 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -157,7 +157,7 @@ ENDPROC(__und_invalid)
#define SPFIX(code...)
#endif
- .macro svc_entry, stack_hole=0, trace=1, uaccess=1, overflow_check=1
+ .macro svc_entry, stack_hole=0 uaccess=1, overflow_check=1
UNWIND(.fnstart )
sub sp, sp, #(SVC_REGS_SIZE + \stack_hole)
THUMB( add sp, r1 ) @ get SP in a GPR without
@@ -207,11 +207,6 @@ ENDPROC(__und_invalid)
mov r0, sp @ 'regs'
bl irqentry_enter_from_kernel_mode
- .if \trace
-#ifdef CONFIG_TRACE_IRQFLAGS
- bl trace_hardirqs_off
-#endif
- .endif
.endm
.align 5
@@ -238,7 +233,7 @@ __irq_svc:
blne svc_preempt
#endif
- svc_exit r5, irq = 1 @ return from exception
+ svc_exit r5 @ return from exception
UNWIND(.fnend )
ENDPROC(__irq_svc)
@@ -302,7 +297,7 @@ ENDPROC(__pabt_svc)
.align 5
__fiq_svc:
- svc_entry trace=0
+ svc_entry
mov r0, sp @ struct pt_regs *regs
bl handle_fiq_as_nmi
svc_exit_via_fiq
@@ -320,7 +315,7 @@ ENDPROC(__fiq_svc)
@
.align 5
__fiq_abt:
- svc_entry trace=0
+ svc_entry
ARM( msr cpsr_c, #ABT_MODE | PSR_I_BIT | PSR_F_BIT )
THUMB( mov r0, #ABT_MODE | PSR_I_BIT | PSR_F_BIT )
--git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
index 49a9c5cf6fd5..cfaf14d71378 100644
--- a/arch/arm/kernel/entry-header.S
+++ b/arch/arm/kernel/entry-header.S
@@ -199,26 +199,11 @@
.endm
- .macro svc_exit, rpsr, irq = 0
- .if \irq != 0
- @ IRQs already off
-#ifdef CONFIG_TRACE_IRQFLAGS
- @ The parent context IRQs must have been enabled to get here in
- @ the first place, so there's no point checking the PSR I bit.
- bl trace_hardirqs_on
-#endif
- .else
+ .macro svc_exit, rpsr
+
@ IRQs off again before pulling preserved data off the stack
disable_irq_notrace
-#ifdef CONFIG_TRACE_IRQFLAGS
- tst \rpsr, #PSR_I_BIT
- bleq trace_hardirqs_on
- tst \rpsr, #PSR_I_BIT
- blne trace_hardirqs_off
-#endif
- .endif
-
mov r0, sp @ 'regs'
bl irqentry_exit_to_kernel_mode
diff --git a/arch/arm/kernel/entry.c b/arch/arm/kernel/entry.c
index 674b5adcec00..1e1284cc4cae 100644
--- a/arch/arm/kernel/entry.c
+++ b/arch/arm/kernel/entry.c
@@ -59,8 +59,13 @@ noinstr void irqentry_exit_to_user_mode(struct pt_regs *regs)
noinstr void irqentry_enter_from_kernel_mode(struct pt_regs *regs)
{
+ trace_hardirqs_off();
}
noinstr void irqentry_exit_to_kernel_mode(struct pt_regs *regs)
{
+ if (interrupts_enabled(regs))
+ trace_hardirqs_on();
+ else
+ trace_hardirqs_off();
}
--
2.46.2
next prev parent reply other threads:[~2024-10-29 10:53 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-29 10:52 [PATCH RFC v2 00/28] ARM: Switch to generic entry Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 01/28] ARM: Prepare includes for " Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 02/28] ARM: ptrace: Split report_syscall() Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 03/28] ARM: entry: Skip ret_slow_syscall label Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 04/28] ARM: process: Rewrite ret_from_fork i C Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 05/28] ARM: process: Remove local restart Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 06/28] ARM: entry: Invoke syscalls using C Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 07/28] ARM: entry: Rewrite two asm calls in C Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 08/28] ARM: entry: Move trace entry to C function Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 09/28] ARM: entry: save the syscall sp in thread_info Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 10/28] ARM: entry: move all tracing invocation to C Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 11/28] ARM: entry: Merge the common and trace entry code Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 12/28] ARM: entry: Rename syscall invocation Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 13/28] ARM: entry: Create user_mode_enter/exit Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 14/28] ARM: entry: Drop trace argument from usr_entry macro Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 15/28] ARM: entry: Separate call path for syscall SWI entry Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 16/28] ARM: entry: Drop argument to asm_irqentry macros Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 17/28] ARM: entry: Implement syscall_exit_to_user_mode() Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 18/28] ARM: entry: Drop the superfast ret_fast_syscall Linus Walleij
2024-10-29 10:52 ` [PATCH RFC v2 19/28] ARM: entry: Remove fast and offset register restore Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 20/28] ARM: entry: Untangle ret_fast_syscall/to_user Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 21/28] ARM: entry: Do not double-call exit functions Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 22/28] ARM: entry: Move work processing to C Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 23/28] ARM: entry: Stop exiting syscalls like IRQs Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 24/28] ARM: entry: Complete syscall and IRQ transition to C Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 25/28] ARM: entry: Create irqentry calls from kernel mode Linus Walleij
2024-10-29 10:53 ` Linus Walleij [this message]
2024-10-29 10:53 ` [PATCH RFC v2 27/28] ARM: entry: Add FIQ/NMI C callbacks Linus Walleij
2024-10-29 10:53 ` [PATCH RFC v2 28/28] ARM: entry: Convert to generic entry 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=20241029-arm-generic-entry-v2-26-573519abef38@linaro.org \
--to=linus.walleij@linaro.org \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--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=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®