]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Dec 2017 07:45:02 +0000 (08:45 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Dec 2017 07:45:02 +0000 (08:45 +0100)
added patches:
s390-runtime-instrumentation-simplify-task-exit-handling.patch

queue-4.14/s390-runtime-instrumentation-simplify-task-exit-handling.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/s390-runtime-instrumentation-simplify-task-exit-handling.patch b/queue-4.14/s390-runtime-instrumentation-simplify-task-exit-handling.patch
new file mode 100644 (file)
index 0000000..002edf9
--- /dev/null
@@ -0,0 +1,118 @@
+From 8d9047f8b967ce6181fd824ae922978e1b055cc0 Mon Sep 17 00:00:00 2001
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+Date: Mon, 11 Sep 2017 11:24:22 +0200
+Subject: s390/runtime instrumentation: simplify task exit handling
+
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+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.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/include/asm/runtime_instr.h |    4 +++-
+ arch/s390/kernel/process.c            |    5 ++---
+ arch/s390/kernel/runtime_instr.c      |   30 +++++++++++++++---------------
+ 3 files changed, 20 insertions(+), 19 deletions(-)
+
+--- a/arch/s390/include/asm/runtime_instr.h
++++ b/arch/s390/include/asm/runtime_instr.h
+@@ -86,6 +86,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 */
+--- a/arch/s390/kernel/process.c
++++ b/arch/s390/kernel/process.c
+@@ -49,10 +49,8 @@ extern void kernel_thread_starter(void);
+  */
+ void exit_thread(struct task_struct *tsk)
+ {
+-      if (tsk == current) {
+-              exit_thread_runtime_instr();
++      if (tsk == current)
+               exit_thread_gs();
+-      }
+ }
+ void flush_thread(void)
+@@ -65,6 +63,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)
+--- a/arch/s390/kernel/runtime_instr.c
++++ b/arch/s390/kernel/runtime_instr.c
+@@ -21,11 +21,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
+@@ -46,19 +59,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;
+@@ -67,7 +67,7 @@ SYSCALL_DEFINE1(s390_runtime_instr, int,
+               return -EOPNOTSUPP;
+       if (command == S390_RUNTIME_INSTR_STOP) {
+-              exit_thread_runtime_instr();
++              disable_runtime_instr();
+               return 0;
+       }
index 9208060102812cca352903f815487c9e714ad896..4a807c5779ac9e9e3f58393f49c513f16b910a11 100644 (file)
@@ -1,3 +1,4 @@
 drm-fsl-dcu-avoid-disabling-pixel-clock-twice-on-suspend.patch
 drm-fsl-dcu-enable-irq-before-drm_atomic_helper_resume.patch
 drm-amdgpu-use-unsigned-ring-indices-in-amdgpu_queue_mgr_map.patch
+s390-runtime-instrumentation-simplify-task-exit-handling.patch