diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 42079bfdf40ae62f85fc9c84560ae40542a5172a..e559c0fa2badf0cd790b354622ac9519d2c952a6 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -2275,6 +2275,13 @@ config UNWIND_PATCH_PAC_INTO_SCS select UNWIND_TABLES select DYNAMIC_SCS +config CLEAR_USER_WORKAROUND + bool "Enable clear user workaround" + depends on ARCH_HISI + default n + help + It has better performance while make sttr instruction 32-aligned in __arch_clear_user(). + endmenu # "Kernel Features" menu "Boot options" diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig index 0312c2d082df0027d3b9fde4d162110de823046f..1ee2692a3053ae9c2f773a49ba1d27d81d67cfde 100644 --- a/arch/arm64/configs/openeuler_defconfig +++ b/arch/arm64/configs/openeuler_defconfig @@ -522,6 +522,7 @@ CONFIG_RANDOMIZE_BASE=y CONFIG_RANDOMIZE_MODULE_REGION_FULL=y CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y CONFIG_STACKPROTECTOR_PER_TASK=y +CONFIG_CLEAR_USER_WORKAROUND=y # end of Kernel Features # diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S index a5a5f5b97b175c6459a1b9fae5ced0c82236baf1..4ae88028716751a0f03013d8152eafc8d77b8dd2 100644 --- a/arch/arm64/lib/clear_user.S +++ b/arch/arm64/lib/clear_user.S @@ -24,6 +24,9 @@ SYM_FUNC_START(__arch_clear_user) add x2, x0, x1 subs x1, x1, #8 b.mi 2f +#ifdef CONFIG_CLEAR_USER_WORKAROUND + .align 5 +#endif 1: USER(9f, sttr xzr, [x0]) add x0, x0, #8