| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Wed, 24 May 2017 10:15:39 +0200 |
| Subject: [PATCH 28/32] s390: Prevent hotplug rwsem recursion |
| |
| The text patching functions which are invoked from jump_label and kprobes |
| code are protected against cpu hotplug at the call sites. |
| |
| Use stop_machine_cpuslocked() to avoid recursion on the cpu hotplug |
| rwsem. stop_machine_cpuslocked() contains a lockdep assertion to catch any |
| unprotected callers. |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Acked-by: Ingo Molnar <mingo@kernel.org> |
| Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> |
| Cc: linux-s390@vger.kernel.org |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Sebastian Siewior <bigeasy@linutronix.de> |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Link: http://lkml.kernel.org/r/20170524081549.354513406@linutronix.de |
| --- |
| arch/s390/kernel/jump_label.c | 2 +- |
| arch/s390/kernel/kprobes.c | 4 ++-- |
| 2 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/arch/s390/kernel/jump_label.c |
| +++ b/arch/s390/kernel/jump_label.c |
| @@ -93,7 +93,7 @@ void arch_jump_label_transform(struct ju |
| args.entry = entry; |
| args.type = type; |
| |
| - stop_machine(__sm_arch_jump_label_transform, &args, NULL); |
| + stop_machine_cpuslocked(__sm_arch_jump_label_transform, &args, NULL); |
| } |
| |
| void arch_jump_label_transform_static(struct jump_entry *entry, |
| --- a/arch/s390/kernel/kprobes.c |
| +++ b/arch/s390/kernel/kprobes.c |
| @@ -196,7 +196,7 @@ void arch_arm_kprobe(struct kprobe *p) |
| { |
| struct swap_insn_args args = {.p = p, .arm_kprobe = 1}; |
| |
| - stop_machine(swap_instruction, &args, NULL); |
| + stop_machine_cpuslocked(swap_instruction, &args, NULL); |
| } |
| NOKPROBE_SYMBOL(arch_arm_kprobe); |
| |
| @@ -204,7 +204,7 @@ void arch_disarm_kprobe(struct kprobe *p |
| { |
| struct swap_insn_args args = {.p = p, .arm_kprobe = 0}; |
| |
| - stop_machine(swap_instruction, &args, NULL); |
| + stop_machine_cpuslocked(swap_instruction, &args, NULL); |
| } |
| NOKPROBE_SYMBOL(arch_disarm_kprobe); |
| |