From: Greg Kroah-Hartman Date: Wed, 6 Dec 2017 07:45:02 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v3.18.87~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e0df803052c1d67a1f71258033da0f8f6dfe002c;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: s390-runtime-instrumentation-simplify-task-exit-handling.patch --- 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 index 00000000000..002edf9676b --- /dev/null +++ b/queue-4.14/s390-runtime-instrumentation-simplify-task-exit-handling.patch @@ -0,0 +1,118 @@ +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 +Cc: Ben Hutchings +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + } + diff --git a/queue-4.14/series b/queue-4.14/series index 92080601028..4a807c5779a 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -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