Patch "s390/runtime instrumentation: simplify task exit handling" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
s390/runtime instrumentation: simplify task exit handling
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
s390-runtime-instrumentation-simplify-task-exit-handling.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
8d9047f8b967ce6181fd824ae922978e1b055cc0Mon Sep 17 00:00:00 2001
From: Heiko Carstens <[email protected]>
Date: Mon, 11 Sep 2017 11:24:22 +0200
Subject: s390/runtime instrumentation: simplify task exit handling
From: Heiko Carstens <[email protected]>
commit 8d9047f8b967ce6181fd824ae922978e1b055cc0 upstream.
Free data structures required for runtime instrumentation from arch_release_task_struct(). This allows to simplify the code a bit, and also makes the semantics a bit easier: arch_release_task_struct() is never called from the task that is being removed.
In addition this allows to get rid of exit_thread() in a later patch.
--- arch/s390/include/asm/runtime_instr.h | 4 +++- arch/s390/kernel/process.c | 3 +-- arch/s390/kernel/runtime_instr.c | 30 +++++++++++++++--------------- 3 files changed, 19 insertions(+), 18 deletions(-)
arch/s390/include/asm/runtime_instr.h +3 -1
@@ -85,6 +85,8 @@ static inline void restore_ri_cb(struct load_runtime_instr_cb(&runtime_instr_empty_cb); } -void exit_thread_runtime_instr (void ); +struct task_struct ; + +void runtime_instr_release (struct task_struct *tsk);#endif /* _RUNTIME_INSTR_H */
arch/s390/kernel/process.c +1 -2
@@ -70,8 +70,6 @@ extern void kernel_thread_starter(void);*/ void exit_thread (struct task_struct *tsk) { -if (tsk == current) -exit_thread_runtime_instr (); }void flush_thread (void )
@@ -84,6 +82,7 @@ void release_thread(struct task_struct *void arch_release_task_struct (struct task_struct *tsk) { +runtime_instr_release (tsk); }int arch_dup_task_struct (struct task_struct *dst,struct task_struct *src)
arch/s390/kernel/runtime_instr.c +15 -15
@@ -18,11 +18,24 @@/* empty control block to disable RI by loading it */ struct runtime_instr_cb runtime_instr_empty_cb; +void runtime_instr_release (struct task_struct *tsk) +{ +kfree (tsk->thread.ri_cb); +} +static void disable_runtime_instr (void ) { -struct pt_regs *regs =task_pt_regs (current); +struct task_struct *task = current; +struct pt_regs *regs; +if (!task->thread.ri_cb) +return ; + regs =task_pt_regs (task); +preempt_disable ();load_runtime_instr_cb (&runtime_instr_empty_cb); +kfree (task->thread.ri_cb); + task->thread.ri_cb =NULL ; +preempt_enable ();/* * Make sure the RI bit is deleted from the PSW. If the user did not
@@ -43,19 +56,6 @@ static void init_runtime_instr_cb(struct cb->valid =1 ; } -void exit_thread_runtime_instr (void ) -{ -struct task_struct *task = current; - -preempt_disable (); -if (!task->thread.ri_cb) -return ; -disable_runtime_instr (); -kfree (task->thread.ri_cb); - task->thread.ri_cb =NULL ; -preempt_enable (); -} - SYSCALL_DEFINE1(s390_runtime_instr, int, command) {struct runtime_instr_cb *cb;
@@ -64,7 +64,7 @@ SYSCALL_DEFINE1(s390_runtime_instr, int,return -EOPNOTSUPP ;if (command ==S390_RUNTIME_INSTR_STOP ) { -exit_thread_runtime_instr (); +disable_runtime_instr ();return 0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/s390-runtime-instrumentation-simplify-task-exit-handling.patch