From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751915AbdHaHcI (ORCPT ); Thu, 31 Aug 2017 03:32:08 -0400 Received: from Galois.linutronix.de ([146.0.238.70]:58984 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751301AbdHaHb6 (ORCPT ); Thu, 31 Aug 2017 03:31:58 -0400 Message-Id: <20170831073055.331699267@linutronix.de> User-Agent: quilt/0.63-1 Date: Thu, 31 Aug 2017 09:16:27 +0200 From: Thomas Gleixner To: LKML Cc: Peter Zijlstra , Ingo Molnar , Andrew Morton , Borislav Petkov , Sebastian Siewior , Nicholas Piggin , Don Zickus , Chris Metcalf , Ulrich Obergfell , Benjamin Herrenschmidt , Michael Ellerman , linuxppc-dev@lists.ozlabs.org Subject: [patch 29/29] lockup_detector: Cleanup hotplug locking mess References: <20170831071558.995235362@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=lockup_detector--Cleanup-hotplug-locking-mess.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: Benjamin Herrenschmidt Cc: Michael Ellerman Cc: Nicholas Piggin Cc: linuxppc-dev@lists.ozlabs.org --- 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 @@ -356,6 +356,7 @@ void watchdog_nmi_reconfigure(bool stop) { int cpu; + cpus_read_lock(); if (stop) { for_each_cpu(cpu, &wd_cpus_enabled) stop_wd_on_cpu(cpu); @@ -364,6 +365,7 @@ void watchdog_nmi_reconfigure(bool stop) 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 @@ -652,7 +652,6 @@ static int proc_watchdog_common(int whic { int err, old, *param = table->data; - cpu_hotplug_disable(); mutex_lock(&watchdog_mutex); if (!write) { @@ -669,7 +668,6 @@ static int proc_watchdog_common(int whic proc_watchdog_update(); } mutex_unlock(&watchdog_mutex); - cpu_hotplug_enable(); return err; } @@ -713,7 +711,6 @@ int proc_watchdog_thresh(struct ctl_tabl { int err, old; - cpu_hotplug_disable(); mutex_lock(&watchdog_mutex); old = READ_ONCE(watchdog_thresh); @@ -723,7 +720,6 @@ int proc_watchdog_thresh(struct ctl_tabl proc_watchdog_update(); mutex_unlock(&watchdog_mutex); - cpu_hotplug_enable(); return err; } @@ -738,7 +734,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); @@ -746,7 +741,6 @@ int proc_watchdog_cpumask(struct ctl_tab proc_watchdog_update(); mutex_unlock(&watchdog_mutex); - cpu_hotplug_enable(); return err; } #endif /* CONFIG_SYSCTL */