FROMGIT: arm64/fpsimd: Remove redundant SVE trap manipulation
When task_fpsimd_load() loads the saved FPSIMD/SVE/SME state, it
configures EL0 SVE traps by calling sve_user_{enable,disable}(). This is
unnecessary, and this is suspicious/confusing as task_fpsimd_load() does
not configure EL0 SME traps.
All calls to task_fpsimd_load() are followed by a call to
fpsimd_bind_task_to_cpu(), where the latter configures traps for SVE and
SME dependent upon the current values of TIF_SVE and TIF_SME, overriding
any trap configuration performed by task_fpsimd_load().
The calls to sve_user_{enable,disable}() calls in task_fpsimd_load()
have been redundant (though benign) since they were introduced in
commit:
a0136be443 ("arm64/fpsimd: Load FP state based on recorded data type")
Remove the unnecessary and confusing SVE trap manipulation.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Will Deacon <will@kernel.org>
Reviewed-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20250409164010.3480271-4-mark.rutland@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit 45fd86986b79c3ada56d3a14e712447e992433aa
https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git
for-next/sme-fixes)
Bug: 393087661
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I051d7e5406fd5abf6edb03b295043287e91a6d03
This commit is contained in:
committed by
Will Deacon
parent
2ccf10f4a6
commit
f55fc6340b
@@ -366,13 +366,11 @@ static void task_fpsimd_load(void)
|
||||
switch (current->thread.fp_type) {
|
||||
case FP_STATE_FPSIMD:
|
||||
/* Stop tracking SVE for this task until next use. */
|
||||
if (test_and_clear_thread_flag(TIF_SVE))
|
||||
sve_user_disable();
|
||||
clear_thread_flag(TIF_SVE);
|
||||
break;
|
||||
case FP_STATE_SVE:
|
||||
if (!thread_sm_enabled(¤t->thread) &&
|
||||
!WARN_ON_ONCE(!test_and_set_thread_flag(TIF_SVE)))
|
||||
sve_user_enable();
|
||||
if (!thread_sm_enabled(¤t->thread))
|
||||
WARN_ON_ONCE(!test_and_set_thread_flag(TIF_SVE));
|
||||
|
||||
if (test_thread_flag(TIF_SVE))
|
||||
sve_set_vq(sve_vq_from_vl(task_get_sve_vl(current)) - 1);
|
||||
|
||||
Reference in New Issue
Block a user