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]>
Cc: Don Zickus <[email protected]>
Cc: Chris Metcalf <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Sebastian Siewior <[email protected]>
Cc: Nicholas Piggin <[email protected]>
Cc: Ulrich Obergfell <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Michael Ellerman <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Link: http://lkml.kernel.org/r/[email protected]

---
 arch/powerpc/kernel/watchdog.c |    2 ++
 kernel/watchdog.c              |    6 ------
 2 files changed, 2 insertions(+), 6 deletions(-)

--- 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();
 }
 
 /*
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -664,7 +664,6 @@ static int proc_watchdog_common(int whic
 {
        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 whic
                        proc_watchdog_update();
        }
        mutex_unlock(&watchdog_mutex);
-       cpu_hotplug_enable();
        return err;
 }
 
@@ -725,7 +723,6 @@ int proc_watchdog_thresh(struct ctl_tabl
 {
        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_tabl
                proc_watchdog_update();
 
        mutex_unlock(&watchdog_mutex);
-       cpu_hotplug_enable();
        return err;
 }
 
@@ -750,7 +746,6 @@ int proc_watchdog_cpumask(struct ctl_tab
 {
        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_tab
                proc_watchdog_update();
 
        mutex_unlock(&watchdog_mutex);
-       cpu_hotplug_enable();
        return err;
 }
 #endif /* CONFIG_SYSCTL */


Reply via email to