From: Greg Kroah-Hartman Date: Wed, 6 Dec 2017 13:53:38 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v3.18.87~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d90295b86ae41a3e92562d291e0a2195c1c238e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: s390-runtime-instrumentation-simplify-task-exit-handling.patch --- diff --git a/queue-4.4/s390-runtime-instrumentation-simplify-task-exit-handling.patch b/queue-4.4/s390-runtime-instrumentation-simplify-task-exit-handling.patch new file mode 100644 index 00000000000..de821b6ed09 --- /dev/null +++ b/queue-4.4/s390-runtime-instrumentation-simplify-task-exit-handling.patch @@ -0,0 +1,114 @@ +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 | 2 +- + arch/s390/kernel/runtime_instr.c | 30 +++++++++++++++--------------- + 3 files changed, 19 insertions(+), 17 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 +@@ -72,7 +72,6 @@ extern void kernel_thread_starter(void); + */ + void exit_thread(void) + { +- exit_thread_runtime_instr(); + } + + void flush_thread(void) +@@ -87,6 +86,7 @@ void arch_release_task_struct(struct tas + { + /* Free either the floating-point or the vector register save area */ + kfree(tsk->thread.fpu.regs); ++ 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.4/series b/queue-4.4/series index d8c417e6ab4..72e95f958f9 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -3,3 +3,4 @@ bcache-recover-data-from-backing-when-data-is-clean.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