From e636c8d336489bf3eed5878299e6cc045bbad077 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 20 Feb 2024 01:17:29 +0000
Subject: [PATCH] debug lk
---
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