From: Greg Kroah-Hartman Date: Wed, 6 Dec 2017 13:53:56 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v3.18.87~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0eb2fb84e13b7a4a51ef80a9e0a7bb64bb540df1;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: s390-runtime-instrumentation-simplify-task-exit-handling.patch --- 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 index 00000000000..fde5003fcb5 --- /dev/null +++ b/queue-4.9/s390-runtime-instrumentation-simplify-task-exit-handling.patch @@ -0,0 +1,115 @@ +From 8d9047f8b967ce6181fd824ae922978e1b055cc0 Mon Sep 17 00:00:00 2001 +From: Heiko Carstens +Date: Mon, 11 Sep 2017 11:24:22 +0200 +Subject: s390/runtime instrumentation: simplify task exit handling + +From: Heiko Carstens + +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 +Signed-off-by: Martin Schwidefsky +Signed-off-by: Greg Kroah-Hartman + + +--- + 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; + } + diff --git a/queue-4.9/series b/queue-4.9/series index a8cbe7036c6..8e85e09ba30 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -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