summaryrefslogtreecommitdiffstats
path: root/arch/arm64/kernel/process.c
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2018-08-07 13:47:06 +0100
committerCatalin Marinas <catalin.marinas@arm.com>2018-09-14 17:46:19 +0100
commit8f04e8e6e29c93421a95b61cad62e3918425eac7 (patch)
treed933a8bd5c9e9a3094019c9bc51d5b5178eb768e /arch/arm64/kernel/process.c
parent0bf0f444b2c49241b2b39aa3cf210d7c95ef6c34 (diff)
downloadlinux-stable-8f04e8e6e29c93421a95b61cad62e3918425eac7.tar.gz
linux-stable-8f04e8e6e29c93421a95b61cad62e3918425eac7.tar.bz2
linux-stable-8f04e8e6e29c93421a95b61cad62e3918425eac7.zip
arm64: ssbd: Add support for PSTATE.SSBS rather than trapping to EL3
On CPUs with support for PSTATE.SSBS, the kernel can toggle the SSBD state without needing to call into firmware. This patch hooks into the existing SSBD infrastructure so that SSBS is used on CPUs that support it, but it's all made horribly complicated by the very real possibility of big/little systems that don't uniformly provide the new capability. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/kernel/process.c')
-rw-r--r--arch/arm64/kernel/process.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 7f1628effe6d..ce99c58cd1f1 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -358,6 +358,10 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
if (IS_ENABLED(CONFIG_ARM64_UAO) &&
cpus_have_const_cap(ARM64_HAS_UAO))
childregs->pstate |= PSR_UAO_BIT;
+
+ if (arm64_get_ssbd_state() == ARM64_SSBD_FORCE_DISABLE)
+ childregs->pstate |= PSR_SSBS_BIT;
+
p->thread.cpu_context.x19 = stack_start;
p->thread.cpu_context.x20 = stk_sz;
}