| From foo@baz Wed Nov 21 19:20:53 CET 2018 |
| From: David Long <dave.long@linaro.org> |
| Date: Wed, 7 Nov 2018 11:43:54 -0500 |
| Subject: ARM: spectre-v1: add speculation barrier (csdb) macros |
| To: stable@vger.kernel.org, Russell King - ARM Linux <linux@armlinux.org.uk>, Florian Fainelli <f.fainelli@gmail.com>, Tony Lindgren <tony@atomide.com>, Marc Zyngier <marc.zyngier@arm.com>, Mark Rutland <mark.rutland@arm.com> |
| Cc: Greg KH <gregkh@linuxfoundation.org>, Mark Brown <broonie@kernel.org> |
| Message-ID: <20181107164402.9380-17-dave.long@linaro.org> |
| |
| From: Russell King <rmk+kernel@armlinux.org.uk> |
| |
| Commit a78d156587931a2c3b354534aa772febf6c9e855 upstream. |
| |
| Add assembly and C macros for the new CSDB instruction. |
| |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Acked-by: Mark Rutland <mark.rutland@arm.com> |
| Boot-tested-by: Tony Lindgren <tony@atomide.com> |
| Reviewed-by: Tony Lindgren <tony@atomide.com> |
| Signed-off-by: David A. Long <dave.long@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm/include/asm/assembler.h | 8 ++++++++ |
| arch/arm/include/asm/barrier.h | 13 +++++++++++++ |
| 2 files changed, 21 insertions(+) |
| |
| --- a/arch/arm/include/asm/assembler.h |
| +++ b/arch/arm/include/asm/assembler.h |
| @@ -445,6 +445,14 @@ THUMB( orr \reg , \reg , #PSR_T_BIT ) |
| .size \name , . - \name |
| .endm |
| |
| + .macro csdb |
| +#ifdef CONFIG_THUMB2_KERNEL |
| + .inst.w 0xf3af8014 |
| +#else |
| + .inst 0xe320f014 |
| +#endif |
| + .endm |
| + |
| .macro check_uaccess, addr:req, size:req, limit:req, tmp:req, bad:req |
| #ifndef CONFIG_CPU_USE_DOMAINS |
| adds \tmp, \addr, #\size - 1 |
| --- a/arch/arm/include/asm/barrier.h |
| +++ b/arch/arm/include/asm/barrier.h |
| @@ -16,6 +16,12 @@ |
| #define isb(option) __asm__ __volatile__ ("isb " #option : : : "memory") |
| #define dsb(option) __asm__ __volatile__ ("dsb " #option : : : "memory") |
| #define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") |
| +#ifdef CONFIG_THUMB2_KERNEL |
| +#define CSDB ".inst.w 0xf3af8014" |
| +#else |
| +#define CSDB ".inst 0xe320f014" |
| +#endif |
| +#define csdb() __asm__ __volatile__(CSDB : : : "memory") |
| #elif defined(CONFIG_CPU_XSC3) || __LINUX_ARM_ARCH__ == 6 |
| #define isb(x) __asm__ __volatile__ ("mcr p15, 0, %0, c7, c5, 4" \ |
| : : "r" (0) : "memory") |
| @@ -36,6 +42,13 @@ |
| #define dmb(x) __asm__ __volatile__ ("" : : : "memory") |
| #endif |
| |
| +#ifndef CSDB |
| +#define CSDB |
| +#endif |
| +#ifndef csdb |
| +#define csdb() |
| +#endif |
| + |
| #ifdef CONFIG_ARM_HEAVY_MB |
| extern void (*soc_mb)(void); |
| extern void arm_heavy_mb(void); |