|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 3/6] xen/arm: Add ARM64_HAS_LSE_ATOMICS hwcap
This patch introduces the ARM64_HAS_LSE_ATOMICS hwcap.
While doing this, CONFIG_ARM64_LSE_ATOMICS is added to control whether
the hwcap is actually detected and set at runtime. Without this Kconfig
being set we will always fallback on LL/SC atomics using Armv8.0 exlusive
accesses.
Note this patch does not actually add the ALTERNATIVE() switching based
on the hwcap being detected and set; that comes later in the series.
Signed-off-by: Ash Wilding <ash.j.wilding@xxxxxxxxx>
---
xen/arch/arm/Kconfig | 11 +++++++++++
xen/arch/arm/Makefile | 1 +
xen/arch/arm/lse.c | 13 +++++++++++++
xen/include/asm-arm/cpufeature.h | 3 ++-
4 files changed, 27 insertions(+), 1 deletion(-)
create mode 100644 xen/arch/arm/lse.c
diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
index 2777388265..febc41e492 100644
--- a/xen/arch/arm/Kconfig
+++ b/xen/arch/arm/Kconfig
@@ -78,6 +78,17 @@ config SBSA_VUART_CONSOLE
Allows a guest to use SBSA Generic UART as a console. The
SBSA Generic UART implements a subset of ARM PL011 UART.
+config ARM64_LSE_ATOMICS
+ bool "Armv8.1-LSE Atomics"
+ depends on ARM_64 && HAS_ALTERNATIVE
+ default y
+ ---help---
+ When set, dynamically patch Xen at runtime to use Armv8.1-LSE
+ atomics when supported by the system.
+
+ When unset, or when Armv8.1-LSE atomics are not supported by the
+ system, fallback on LL/SC atomics using Armv8.0 exclusive accesses.
+
config ARM_SSBD
bool "Speculative Store Bypass Disable" if EXPERT
depends on HAS_ALTERNATIVE
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 296c5e68bb..cadd0ad253 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -63,6 +63,7 @@ obj-y += vsmc.o
obj-y += vpsci.o
obj-y += vuart.o
extra-y += $(TARGET_SUBARCH)/head.o
+obj-$(CONFIG_ARM64_LSE_ATOMICS) += lse.o
#obj-bin-y += ....o
diff --git a/xen/arch/arm/lse.c b/xen/arch/arm/lse.c
new file mode 100644
index 0000000000..8274dac671
--- /dev/null
+++ b/xen/arch/arm/lse.c
@@ -0,0 +1,13 @@
+
+#include <asm/cpufeature.h>
+#include <xen/init.h>
+
+static int __init update_lse_caps(void)
+{
+ if ( cpu_has_lse_atomics )
+ cpus_set_cap(ARM64_HAS_LSE_ATOMICS);
+
+ return 0;
+}
+
+__initcall(update_lse_caps);
diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
index 2366926e82..48c172ee29 100644
--- a/xen/include/asm-arm/cpufeature.h
+++ b/xen/include/asm-arm/cpufeature.h
@@ -42,8 +42,9 @@
#define ARM_SSBD 7
#define ARM_SMCCC_1_1 8
#define ARM64_WORKAROUND_AT_SPECULATE 9
+#define ARM64_HAS_LSE_ATOMICS 10
-#define ARM_NCAPS 10
+#define ARM_NCAPS 11
#ifndef __ASSEMBLY__
--
2.24.3 (Apple Git-128)
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |