提交 ab5fe3ff 编写于 作者: T Thomas Gleixner 提交者: Ingo Molnar

watchdog/hardlockup: Clean up hotplug locking mess

All watchdog thread related functions are delegated to the smpboot thread
infrastructure, which handles serialization against CPU hotplug correctly.

The sysctl interface is completely decoupled from anything which requires
CPU hotplug protection.

No need to protect the sysctl writes against cpu hotplug anymore. Remove it
and add the now required protection to the powerpc arch_nmi_watchdog
implementation.
Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
Reviewed-by: NDon Zickus <dzickus@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Chris Metcalf <cmetcalf@mellanox.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Siewior <bigeasy@linutronix.de>
Cc: Ulrich Obergfell <uobergfe@redhat.com>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/20170912194148.418497420@linutronix.deSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 a33d4484
...@@ -359,6 +359,7 @@ void watchdog_nmi_reconfigure(bool run) ...@@ -359,6 +359,7 @@ void watchdog_nmi_reconfigure(bool run)
{ {
int cpu; int cpu;
cpus_read_lock();
if (!run) { if (!run) {
for_each_cpu(cpu, &wd_cpus_enabled) for_each_cpu(cpu, &wd_cpus_enabled)
stop_wd_on_cpu(cpu); stop_wd_on_cpu(cpu);
...@@ -367,6 +368,7 @@ void watchdog_nmi_reconfigure(bool run) ...@@ -367,6 +368,7 @@ void watchdog_nmi_reconfigure(bool run)
for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask) for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask)
start_wd_on_cpu(cpu); start_wd_on_cpu(cpu);
} }
cpus_read_unlock();
} }
/* /*
......
...@@ -664,7 +664,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write, ...@@ -664,7 +664,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
{ {
int err, old, *param = table->data; int err, old, *param = table->data;
cpu_hotplug_disable();
mutex_lock(&watchdog_mutex); mutex_lock(&watchdog_mutex);
if (!write) { if (!write) {
...@@ -681,7 +680,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write, ...@@ -681,7 +680,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
proc_watchdog_update(); proc_watchdog_update();
} }
mutex_unlock(&watchdog_mutex); mutex_unlock(&watchdog_mutex);
cpu_hotplug_enable();
return err; return err;
} }
...@@ -725,7 +723,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write, ...@@ -725,7 +723,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
{ {
int err, old; int err, old;
cpu_hotplug_disable();
mutex_lock(&watchdog_mutex); mutex_lock(&watchdog_mutex);
old = READ_ONCE(watchdog_thresh); old = READ_ONCE(watchdog_thresh);
...@@ -735,7 +732,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write, ...@@ -735,7 +732,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
proc_watchdog_update(); proc_watchdog_update();
mutex_unlock(&watchdog_mutex); mutex_unlock(&watchdog_mutex);
cpu_hotplug_enable();
return err; return err;
} }
...@@ -750,7 +746,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write, ...@@ -750,7 +746,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
{ {
int err; int err;
cpu_hotplug_disable();
mutex_lock(&watchdog_mutex); mutex_lock(&watchdog_mutex);
err = proc_do_large_bitmap(table, write, buffer, lenp, ppos); err = proc_do_large_bitmap(table, write, buffer, lenp, ppos);
...@@ -758,7 +753,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write, ...@@ -758,7 +753,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
proc_watchdog_update(); proc_watchdog_update();
mutex_unlock(&watchdog_mutex); mutex_unlock(&watchdog_mutex);
cpu_hotplug_enable();
return err; return err;
} }
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册