From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/arch/arm64/kernel/fpsimd.c | 37 ++++++++++++++++--------------------- 1 files changed, 16 insertions(+), 21 deletions(-) diff --git a/kernel/arch/arm64/kernel/fpsimd.c b/kernel/arch/arm64/kernel/fpsimd.c index c347a88..5335a6b 100644 --- a/kernel/arch/arm64/kernel/fpsimd.c +++ b/kernel/arch/arm64/kernel/fpsimd.c @@ -180,10 +180,7 @@ */ static void get_cpu_fpsimd_context(void) { - if (!IS_ENABLED(CONFIG_PREEMPT_RT)) - local_bh_disable(); - else - preempt_disable(); + local_bh_disable(); __get_cpu_fpsimd_context(); } @@ -204,10 +201,7 @@ static void put_cpu_fpsimd_context(void) { __put_cpu_fpsimd_context(); - if (!IS_ENABLED(CONFIG_PREEMPT_RT)) - local_bh_enable(); - else - preempt_enable(); + local_bh_enable(); } static bool have_cpu_fpsimd_context(void) @@ -215,14 +209,21 @@ return !preemptible() && __this_cpu_read(fpsimd_context_busy); } -static void *sve_free_atomic(struct task_struct *task) +/* + * Call __sve_free() directly only if you know task can't be scheduled + * or preempted. + */ +static void __sve_free(struct task_struct *task) { - void *sve_state = task->thread.sve_state; + kfree(task->thread.sve_state); + task->thread.sve_state = NULL; +} +static void sve_free(struct task_struct *task) +{ WARN_ON(test_tsk_thread_flag(task, TIF_SVE)); - task->thread.sve_state = NULL; - return sve_state; + __sve_free(task); } /* @@ -583,7 +584,6 @@ int sve_set_vector_length(struct task_struct *task, unsigned long vl, unsigned long flags) { - void *mem = NULL; if (flags & ~(unsigned long)(PR_SVE_VL_INHERIT | PR_SVE_SET_VL_ONEXEC)) return -EINVAL; @@ -637,10 +637,9 @@ * Force reallocation of task SVE state to the correct size * on next use: */ - mem = sve_free_atomic(task); + sve_free(task); task->thread.sve_vl = vl; - kfree(mem); out: update_tsk_thread_flag(task, TIF_SVE_VL_INHERIT, @@ -918,9 +917,7 @@ */ void fpsimd_release_task(struct task_struct *dead_task) { - void *mem = NULL; - mem = sve_free_atomic(dead_task); - kfree(mem); + __sve_free(dead_task); } #endif /* CONFIG_ARM64_SVE */ @@ -1025,7 +1022,6 @@ void fpsimd_flush_thread(void) { int vl, supported_vl; - void *mem = NULL; if (!system_supports_fpsimd()) return; @@ -1038,7 +1034,7 @@ if (system_supports_sve()) { clear_thread_flag(TIF_SVE); - mem = sve_free_atomic(current); + sve_free(current); /* * Reset the task vector length as required. @@ -1072,7 +1068,6 @@ } put_cpu_fpsimd_context(); - kfree(mem); } /* -- Gitblit v1.6.2