aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-09-12 15:37:23 -0400
committerIngo Molnar <mingo@kernel.org>2017-09-14 05:41:09 -0400
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 <tglx@linutronix.de> Reviewed-by: Don 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.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
-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)
359{ 359{
360 int cpu; 360 int cpu;
361 361
362 cpus_read_lock();
362 if (!run) { 363 if (!run) {
363 for_each_cpu(cpu, &wd_cpus_enabled) 364 for_each_cpu(cpu, &wd_cpus_enabled)
364 stop_wd_on_cpu(cpu); 365 stop_wd_on_cpu(cpu);
@@ -367,6 +368,7 @@ void watchdog_nmi_reconfigure(bool run)
367 for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask) 368 for_each_cpu_and(cpu, cpu_online_mask, &watchdog_cpumask)
368 start_wd_on_cpu(cpu); 369 start_wd_on_cpu(cpu);
369 } 370 }
371 cpus_read_unlock();
370} 372}
371 373
372/* 374/*
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,
664{ 664{
665 int err, old, *param = table->data; 665 int err, old, *param = table->data;
666 666
667 cpu_hotplug_disable();
668 mutex_lock(&watchdog_mutex); 667 mutex_lock(&watchdog_mutex);
669 668
670 if (!write) { 669 if (!write) {
@@ -681,7 +680,6 @@ static int proc_watchdog_common(int which, struct ctl_table *table, int write,
681 proc_watchdog_update(); 680 proc_watchdog_update();
682 } 681 }
683 mutex_unlock(&watchdog_mutex); 682 mutex_unlock(&watchdog_mutex);
684 cpu_hotplug_enable();
685 return err; 683 return err;
686} 684}
687 685
@@ -725,7 +723,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
725{ 723{
726 int err, old; 724 int err, old;
727 725
728 cpu_hotplug_disable();
729 mutex_lock(&watchdog_mutex); 726 mutex_lock(&watchdog_mutex);
730 727
731 old = READ_ONCE(watchdog_thresh); 728 old = READ_ONCE(watchdog_thresh);
@@ -735,7 +732,6 @@ int proc_watchdog_thresh(struct ctl_table *table, int write,
735 proc_watchdog_update(); 732 proc_watchdog_update();
736 733
737 mutex_unlock(&watchdog_mutex); 734 mutex_unlock(&watchdog_mutex);
738 cpu_hotplug_enable();
739 return err; 735 return err;
740} 736}
741 737
@@ -750,7 +746,6 @@ int proc_watchdog_cpumask(struct ctl_table *table, int write,
750{ 746{
751 int err; 747 int err;
752 748
753 cpu_hotplug_disable();
754 mutex_lock(&watchdog_mutex); 749 mutex_lock(&watchdog_mutex);
755 750
756 err = proc_do_large_bitmap(table, write, buffer, lenp, ppos); 751 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 proc_watchdog_update(); 753 proc_watchdog_update();
759 754
760 mutex_unlock(&watchdog_mutex); 755 mutex_unlock(&watchdog_mutex);
761 cpu_hotplug_enable();
762 return err; 756 return err;
763} 757}
764#endif /* CONFIG_SYSCTL */ 758#endif /* CONFIG_SYSCTL */