diff options
author | Mark Brown <broonie@kernel.org> | 2022-12-27 18:12:04 +0100 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2023-01-05 16:31:18 +0100 |
commit | 0cab5b4964c7064893e6ff5e81087a9206c63908 (patch) | |
tree | b162ef3e16da8c6a851d009e6f76fc7d4b8b3ff2 /arch | |
parent | arm64: cmpxchg_double*: hazard against entire exchange variable (diff) | |
download | linux-0cab5b4964c7064893e6ff5e81087a9206c63908.tar.xz linux-0cab5b4964c7064893e6ff5e81087a9206c63908.zip |
arm64/sme: Fix context switch for SME only systems
When refactoring fpsimd_load() to support keeping SVE enabled over syscalls
support for systems with SME but not SVE was broken. The code that selects
between loading regular FPSIMD and SVE states was guarded by using
system_supports_sve() but is also needed to handle the streaming SVE state
in SME only systems where that check will be false. Fix this by also
checking for system_supports_sme().
Fixes: a0136be443d5 ("arm64/fpsimd: Load FP state based on recorded data type")
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20221223-arm64-fix-sme-only-v1-1-938d663f69e5@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm64/kernel/fpsimd.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index dcc81e7200d4..b6ef1af0122e 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -385,7 +385,7 @@ static void task_fpsimd_load(void) WARN_ON(!system_supports_fpsimd()); WARN_ON(!have_cpu_fpsimd_context()); - if (system_supports_sve()) { + if (system_supports_sve() || system_supports_sme()) { switch (current->thread.fp_type) { case FP_STATE_FPSIMD: /* Stop tracking SVE for this task until next use. */ |