Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1261685

[PATCH 1/4] watchdog: avoid race between lockup detector suspend/resume and CPU hotplug

From Ulrich Obergfell <uobergfe@redhat.com>
Newsgroups linux.kernel
Subject [PATCH 1/4] watchdog: avoid race between lockup detector suspend/resume and CPU hotplug
Date 2015-11-03 17:20 +0100
Message-ID <qqMtt-57V-27@gated-at.bofh.it> (permalink)
References <qqLxo-4or-17@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


The lockup detector suspend/resume interface that was introduced by
commit 8c073d27d7ad293bf734cc8475689413afadab81 does not protect
itself against races with CPU hotplug. Hence, theoretically it is
possible that a new watchdog thread is started on a hotplugged CPU
while the lockup detector is suspended, and the thread could thus
interfere unexpectedly with the code that requested to suspend the
lockup detector. Avoid the race by calling

  get_online_cpus() in lockup_detector_suspend()
  put_online_cpus() in lockup_detector_resume()

Signed-off-by: Ulrich Obergfell <uobergfe@redhat.com>
---
 kernel/watchdog.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 0a23125..7357842 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -719,6 +719,7 @@ int lockup_detector_suspend(void)
 {
 	int ret = 0;
 
+	get_online_cpus();
 	mutex_lock(&watchdog_proc_mutex);
 	/*
 	 * Multiple suspend requests can be active in parallel (counted by
@@ -759,6 +760,7 @@ void lockup_detector_resume(void)
 		watchdog_unpark_threads();
 
 	mutex_unlock(&watchdog_proc_mutex);
+	put_online_cpus();
 }
 
 static int update_watchdog_all_cpus(void)
-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/4] watchdog: address various races (CPU hotplug, timer expiry) Ulrich Obergfell <uobergfe@redhat.com> - 2015-11-03 16:20 +0100
  [PATCH 3/4] watchdog: remove {get|put}_online_cpus() from watchdog_{park|unpark}_threads() Ulrich Obergfell <uobergfe@redhat.com> - 2015-11-03 16:20 +0100
  [PATCH 2/4] watchdog: avoid races between /proc handlers and CPU hotplug Ulrich Obergfell <uobergfe@redhat.com> - 2015-11-03 16:20 +0100
  [PATCH 1/4] watchdog: avoid race between lockup detector suspend/resume and CPU hotplug Ulrich Obergfell <uobergfe@redhat.com> - 2015-11-03 17:20 +0100
  Re: [PATCH 0/4] watchdog: address various races (CPU hotplug, timer  expiry) Don Zickus <dzickus@redhat.com> - 2015-11-05 15:50 +0100
  Re: [PATCH 0/4] watchdog: address various races (CPU hotplug, timer  expiry) Aaron Tomlin <atomlin@redhat.com> - 2015-11-05 22:00 +0100

csiph-web