aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <[email protected]>2017-09-12 21:37:23 +0200
committerIngo Molnar <[email protected]>2017-09-14 11:41:09 +0200
commitab5fe3ff38ff9653490910cc71dbbedc95a86e41 (patch)
tree5855447efbd40d5019ebe10aae80bc7b262bb9b4
parenta33d44843d4574ec05bec39527d8a87b7af2072c (diff)
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: Thomas Gleixner <[email protected]> Reviewed-by: Don Zickus <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Chris Metcalf <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Nicholas Piggin <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Sebastian Siewior <[email protected]> Cc: Ulrich Obergfell <[email protected]> Cc: [email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
-rw-r--r--arch/powerpc/kernel/watchdog.c2
-rw-r--r--kernel/watchdog.c6
2 files changed, 2 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c
index 291af79a9826..dfb067764480 100644
--- a/arch/powerpc/kernel/watchdog.c
+++ b/arch/powerpc/kernel/watchdog.c
@@ -359,6 +359,7 @@ void watchdog_nmi_reconfigure(bool run)
{
int cpu;
+ cpus_read_lock();
if (!run) {
for_each_cpu(cpu, &wd_cpus_enabled)
stop_wd_on_cpu(cpu);
@@ -367,6 +368,7 @@ void watchdog_nmi_reconfigure(bool run)
for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask)
start_wd_on_cpu(cpu);
}
+ cpus_read_unlock();
}
/*
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 5eb11960e4a2..f6ef163b72cd 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -664,7 +664,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
{
int err, old, *param = table->data;
- cpu_hotplug_disable();
mutex_lock(&watchdog_mutex);
if (!write) {
@@ -681,7 +680,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
proc_watchdog_update();
}
mutex_unlock(&watchdog_mutex);
- cpu_hotplug_enable();
return err;
}
@@ -725,7 +723,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
{
int err, old;
- cpu_hotplug_disable();
mutex_lock(&watchdog_mutex);
old = READ_ONCE(watchdog_thresh);
@@ -735,7 +732,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
proc_watchdog_update();
mutex_unlock(&watchdog_mutex);
- cpu_hotplug_enable();
return err;
}
@@ -750,7 +746,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
{
int err;
- cpu_hotplug_disable();
mutex_lock(&watchdog_mutex);
err = proc_do_large_bitmap(table, write, buffer, lenp, ppos);
@@ -758,7 +753,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
proc_watchdog_update();
mutex_unlock(&watchdog_mutex);
- cpu_hotplug_enable();
return err;
}
#endif /* CONFIG_SYSCTL */