diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2017-05-24 11:15:35 +0300 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-05-26 11:10:45 +0300 |
commit | f2545b2d4ce13e068897ef60ae64dffe215f4152 (patch) | |
tree | 8f8808b01165daf8e5450f0d5a7fe25f322fb5a6 /arch/sparc/kernel/jump_label.c | |
parent | a63fbed776c7124ce9f606234267c3c095b2680e (diff) | |
download | linux-f2545b2d4ce13e068897ef60ae64dffe215f4152.tar.xz |
jump_label: Reorder hotplug lock and jump_label_lock
The conversion of the hotplug locking to a percpu rwsem unearthed lock
ordering issues all over the place.
The jump_label code has two issues:
1) Nested get_online_cpus() invocations
2) Ordering problems vs. the cpus rwsem and the jump_label_mutex
To cure these, the following lock order has been established;
cpus_rwsem -> jump_label_lock -> text_mutex
Even if not all architectures need protection against CPU hotplug, taking
cpus_rwsem before jump_label_lock is now mandatory in code pathes which
actually modify code and therefor need text_mutex protection.
Move the get_online_cpus() invocations into the core jump label code and
establish the proper lock order where required.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: "David S. Miller" <davem@davemloft.net>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Chris Metcalf <cmetcalf@mellanox.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Siewior <bigeasy@linutronix.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Link: http://lkml.kernel.org/r/20170524081549.025830817@linutronix.de
Diffstat (limited to 'arch/sparc/kernel/jump_label.c')
-rw-r--r-- | arch/sparc/kernel/jump_label.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/arch/sparc/kernel/jump_label.c b/arch/sparc/kernel/jump_label.c index 07933b9e9ce0..93adde1ac166 100644 --- a/arch/sparc/kernel/jump_label.c +++ b/arch/sparc/kernel/jump_label.c @@ -41,12 +41,10 @@ void arch_jump_label_transform(struct jump_entry *entry, val = 0x01000000; } - get_online_cpus(); mutex_lock(&text_mutex); *insn = val; flushi(insn); mutex_unlock(&text_mutex); - put_online_cpus(); } #endif |