diff options
Diffstat (limited to 'debian/patches-rt/0278-arm64-fpsimd-Delay-freeing-memory-in-fpsimd_flush_th.patch')
-rw-r--r-- | debian/patches-rt/0278-arm64-fpsimd-Delay-freeing-memory-in-fpsimd_flush_th.patch | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/debian/patches-rt/0278-arm64-fpsimd-Delay-freeing-memory-in-fpsimd_flush_th.patch b/debian/patches-rt/0278-arm64-fpsimd-Delay-freeing-memory-in-fpsimd_flush_th.patch deleted file mode 100644 index d55055d4c..000000000 --- a/debian/patches-rt/0278-arm64-fpsimd-Delay-freeing-memory-in-fpsimd_flush_th.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 9dd8053b06e5dd82835dc464918bf9b6669987c0 Mon Sep 17 00:00:00 2001 -From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> -Date: Wed, 25 Jul 2018 14:02:38 +0200 -Subject: [PATCH 278/296] arm64: fpsimd: Delay freeing memory in - fpsimd_flush_thread() -Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.35-rt39.tar.xz - -fpsimd_flush_thread() invokes kfree() via sve_free() within a preempt disabled -section which is not working on -RT. - -Delay freeing of memory until preemption is enabled again. - -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - arch/arm64/kernel/fpsimd.c | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c -index 062b21f30f94..0ea2df6554e5 100644 ---- a/arch/arm64/kernel/fpsimd.c -+++ b/arch/arm64/kernel/fpsimd.c -@@ -226,6 +226,16 @@ static void sve_free(struct task_struct *task) - __sve_free(task); - } - -+static void *sve_free_atomic(struct task_struct *task) -+{ -+ void *sve_state = task->thread.sve_state; -+ -+ WARN_ON(test_tsk_thread_flag(task, TIF_SVE)); -+ -+ task->thread.sve_state = NULL; -+ return sve_state; -+} -+ - /* - * TIF_SVE controls whether a task can use SVE without trapping while - * in userspace, and also the way a task's FPSIMD/SVE state is stored -@@ -1022,6 +1032,7 @@ void fpsimd_thread_switch(struct task_struct *next) - void fpsimd_flush_thread(void) - { - int vl, supported_vl; -+ void *mem = NULL; - - if (!system_supports_fpsimd()) - return; -@@ -1034,7 +1045,7 @@ void fpsimd_flush_thread(void) - - if (system_supports_sve()) { - clear_thread_flag(TIF_SVE); -- sve_free(current); -+ mem = sve_free_atomic(current); - - /* - * Reset the task vector length as required. -@@ -1068,6 +1079,7 @@ void fpsimd_flush_thread(void) - } - - put_cpu_fpsimd_context(); -+ kfree(mem); - } - - /* --- -2.30.2 - |