All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: linux@armlinux.org.uk
Cc: linux-arm-kernel@lists.infradead.org,
	Ard Biesheuvel <ardb@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
	Kees Cook <keescook@chromium.org>,
	Keith Packard <keithpac@amazon.com>,
	Linus Walleij <linus.walleij@linaro.org>
Subject: [PATCH 04/10] ARM: optimize indirect call to handle_arch_irq for v7 cores
Date: Tue, 21 Sep 2021 11:54:02 +0200	[thread overview]
Message-ID: <20210921095408.133210-5-ardb@kernel.org> (raw)
In-Reply-To: <20210921095408.133210-1-ardb@kernel.org>

The current irq_handler macro uses a literal load followed by an
explicit assignment of lr before an indirect call, both of which are
sub-optimal on recent ARM cores. Replace it by a mov_l call, which will
evaluate to a movw/movt pair on v7 cores, avoiding one of the two loads,
followed by a call to a newly introduced 'bl_m' macro, which will
evaluate to a blx instruction on cores that support it. (Setting lr
explicitly rather than via a bl or blx instruction confuses the return
address prediction that modern out-of-order cores use to speculatively
perform the function return.)

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 arch/arm/kernel/entry-armv.S | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index a54b5044d406..21896f702447 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -38,14 +38,12 @@
  */
 	.macro	irq_handler
 #ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
-	ldr	r1, =handle_arch_irq
+	mov_l	r1, handle_arch_irq
 	mov	r0, sp
-	badr	lr, 9997f
-	ldr	pc, [r1]
+	bl_m	[r1]
 #else
 	arch_irq_handler_default
 #endif
-9997:
 	.endm
 
 	.macro	pabt_helper
-- 
2.30.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2021-09-21  9:57 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-21  9:53 [PATCH 00/10] ARM: add support for IRQ stacks Ard Biesheuvel
2021-09-21  9:53 ` [PATCH 01/10] ARM: fix incorrect use of get_kernel_nofault() Ard Biesheuvel
2021-09-21 10:39   ` Arnd Bergmann
2021-09-21 14:02   ` Russell King (Oracle)
2021-09-21 14:33     ` Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 02/10] ARM: remove some dead code Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 03/10] ARM: assembler: introduce bl_r and bl_m macros Ard Biesheuvel
2021-09-21  9:54 ` Ard Biesheuvel [this message]
2021-09-21  9:54 ` [PATCH 05/10] ARM: unwind: support unwinding across multiple stacks Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 06/10] ARM: export dump_mem() to other objects Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 07/10] ARM: unwind: dump exception stack from calling frame Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 08/10] ARM: implement IRQ stacks Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 09/10] ARM: call_with_stack: add unwind support Ard Biesheuvel
2021-09-21  9:54 ` [PATCH 10/10] ARM: run softirqs on the per-CPU IRQ stack Ard Biesheuvel

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=20210921095408.133210-5-ardb@kernel.org \
    --to=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=keescook@chromium.org \
    --cc=keithpac@amazon.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.