diff options
Diffstat (limited to 'debian/patches-rt/sched-delay-put-task.patch')
-rw-r--r-- | debian/patches-rt/sched-delay-put-task.patch | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/debian/patches-rt/sched-delay-put-task.patch b/debian/patches-rt/sched-delay-put-task.patch deleted file mode 100644 index d4460d64f..000000000 --- a/debian/patches-rt/sched-delay-put-task.patch +++ /dev/null @@ -1,86 +0,0 @@ -Subject: sched: Move task_struct cleanup to RCU -From: Thomas Gleixner <tglx@linutronix.de> -Date: Tue, 31 May 2011 16:59:16 +0200 -Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.2/older/patches-5.2.17-rt9.tar.xz - -__put_task_struct() does quite some expensive work. We don't want to -burden random tasks with that. - -Signed-off-by: Thomas Gleixner <tglx@linutronix.de> ---- - include/linux/sched.h | 3 +++ - include/linux/sched/task.h | 12 +++++++++++- - kernel/fork.c | 14 ++++++++++++++ - 3 files changed, 28 insertions(+), 1 deletion(-) - ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -1199,6 +1199,9 @@ struct task_struct { - unsigned int sequential_io; - unsigned int sequential_io_avg; - #endif -+#ifdef CONFIG_PREEMPT_RT_BASE -+ struct rcu_head put_rcu; -+#endif - #ifdef CONFIG_DEBUG_ATOMIC_SLEEP - unsigned long task_state_change; - #endif ---- a/include/linux/sched/task.h -+++ b/include/linux/sched/task.h -@@ -91,6 +91,16 @@ extern void sched_exec(void); - - #define get_task_struct(tsk) do { refcount_inc(&(tsk)->usage); } while(0) - -+#ifdef CONFIG_PREEMPT_RT_BASE -+extern void __put_task_struct_cb(struct rcu_head *rhp); -+ -+static inline void put_task_struct(struct task_struct *t) -+{ -+ if (refcount_dec_and_test(&t->usage)) -+ call_rcu(&t->put_rcu, __put_task_struct_cb); -+} -+#else -+ - extern void __put_task_struct(struct task_struct *t); - - static inline void put_task_struct(struct task_struct *t) -@@ -98,7 +108,7 @@ static inline void put_task_struct(struc - if (refcount_dec_and_test(&t->usage)) - __put_task_struct(t); - } -- -+#endif - struct task_struct *task_rcu_dereference(struct task_struct **ptask); - - #ifdef CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT ---- a/kernel/fork.c -+++ b/kernel/fork.c -@@ -720,6 +720,9 @@ static inline void put_signal_struct(str - free_signal_struct(sig); - } - -+#ifdef CONFIG_PREEMPT_RT_BASE -+static -+#endif - void __put_task_struct(struct task_struct *tsk) - { - WARN_ON(!tsk->exit_state); -@@ -736,7 +739,18 @@ void __put_task_struct(struct task_struc - if (!profile_handoff_task(tsk)) - free_task(tsk); - } -+#ifndef CONFIG_PREEMPT_RT_BASE - EXPORT_SYMBOL_GPL(__put_task_struct); -+#else -+void __put_task_struct_cb(struct rcu_head *rhp) -+{ -+ struct task_struct *tsk = container_of(rhp, struct task_struct, put_rcu); -+ -+ __put_task_struct(tsk); -+ -+} -+EXPORT_SYMBOL_GPL(__put_task_struct_cb); -+#endif - - void __init __weak arch_task_cache_init(void) { } - |