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

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

diff --git a/queue-4.9/s390-runtime-instrumentation-simplify-task-exit-handling.patch b/queue-4.9/s390-runtime-instrumentation-simplify-task-exit-handling.patch
new file mode 100644 (file)
index 0000000..fde5003
--- /dev/null
@@ -0,0 +1,115 @@
+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>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ 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(-)
+
+--- a/arch/s390/include/asm/runtime_instr.h
++++ b/arch/s390/include/asm/runtime_instr.h
+@@ -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 */
+--- a/arch/s390/kernel/process.c
++++ b/arch/s390/kernel/process.c
+@@ -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)
+--- a/arch/s390/kernel/runtime_instr.c
++++ b/arch/s390/kernel/runtime_instr.c
+@@ -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;
+       }
index a8cbe7036c6e89dfc593f8c1055c87e52552bb74..8e85e09ba30a362c8dc294cf731701e99a136e16 100644 (file)
@@ -7,3 +7,4 @@ mm-oom_reaper-gather-each-vma-to-prevent-leaking-tlb-entry.patch
 uas-always-apply-us_fl_no_ata_1x-quirk-to-seagate-devices.patch
 usb-quirks-add-no-lpm-quirk-for-ky-688-usb-3.1-type-c-hub.patch
 serial-8250_pci-add-amazon-pci-serial-device-id.patch
+s390-runtime-instrumentation-simplify-task-exit-handling.patch