arm64: barrier: Restore spec_bar() macro
authorMark Rutland <mark.rutland@arm.com>
Wed, 8 May 2024 08:13:57 +0000 (09:13 +0100)
committerWill Deacon <will@kernel.org>
Fri, 10 May 2024 11:21:56 +0000 (12:21 +0100)
Upcoming errata workarounds will need to use SB from C code. Restore the
spec_bar() macro so that we can use SB.

This is effectively a revert of commit:

  4f30ba1cce36d413 ("arm64: barrier: Remove spec_bar() macro")

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20240508081400.235362-2-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/barrier.h

index cf2987464c18602e2343707614581270f57ca247..1ca947d5c93963d33fe8fb02d6037fc71bd9fd7a 100644 (file)
  */
 #define dgh()          asm volatile("hint #6" : : : "memory")
 
+#define spec_bar()     asm volatile(ALTERNATIVE("dsb nsh\nisb\n",              \
+                                                SB_BARRIER_INSN"nop\n",        \
+                                                ARM64_HAS_SB))
+
 #ifdef CONFIG_ARM64_PSEUDO_NMI
 #define pmr_sync()                                             \
        do {                                                    \