public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Fix softlockup_thresh unaligned access and disable detection at runtime
@ 2008-05-02 12:56 Dimitri Sivanich
  2008-05-04  9:02 ` Ingo Molnar
  0 siblings, 1 reply; 2+ messages in thread
From: Dimitri Sivanich @ 2008-05-02 12:56 UTC (permalink / raw)
  To: Ingo Molnar, linux-kernel; +Cc: Thomas Gleixner, Peter Zijlstra

Fix unaligned access errors when setting softlockup_thresh on
64 bit platforms.

Allow softlockup detection to be disabled by setting
softlockup_thresh <= 0.

Detect that boot time softlockup detection has been disabled
earlier in softlockup_tick.

Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>


---
 include/linux/sched.h |    2 +-
 kernel/softlockup.c   |   12 ++++++++++--
 kernel/sysctl.c       |    9 +++++----
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h
index 03c2380..d61e9b7 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -292,10 +292,10 @@ extern void softlockup_tick(void);
 extern void spawn_softlockup_task(void);
 extern void touch_softlockup_watchdog(void);
 extern void touch_all_softlockup_watchdogs(void);
-extern unsigned long  softlockup_thresh;
 extern unsigned long sysctl_hung_task_check_count;
 extern unsigned long sysctl_hung_task_timeout_secs;
 extern unsigned long sysctl_hung_task_warnings;
+extern int softlockup_thresh;
 #else
 static inline void softlockup_tick(void)
 {
diff --git a/kernel/softlockup.c b/kernel/softlockup.c
index 01b6522..ef60e7c 100644
--- a/kernel/softlockup.c
+++ b/kernel/softlockup.c
@@ -25,7 +25,7 @@ static DEFINE_PER_CPU(unsigned long, print_timestamp);
 static DEFINE_PER_CPU(struct task_struct *, watchdog_task);
 
 static int __read_mostly did_panic;
-unsigned long __read_mostly softlockup_thresh = 60;
+int __read_mostly softlockup_thresh = 60;
 
 static int
 softlock_panic(struct notifier_block *this, unsigned long event, void *ptr)
@@ -79,6 +79,14 @@ void softlockup_tick(void)
 	struct pt_regs *regs = get_irq_regs();
 	unsigned long now;
 
+	/* Is detection switched off? */
+	if (!per_cpu(watchdog_task, this_cpu) || softlockup_thresh <= 0) {
+		/* Be sure we don't false trigger if switched back on */
+		if (touch_timestamp)
+			per_cpu(touch_timestamp, this_cpu) = 0;
+		return;
+	}
+
 	if (touch_timestamp == 0) {
 		touch_softlockup_watchdog();
 		return;
@@ -89,7 +97,7 @@ void softlockup_tick(void)
 	/* report at most once a second */
 	if ((print_timestamp >= touch_timestamp &&
 			print_timestamp < (touch_timestamp + 1)) ||
-			did_panic || !per_cpu(watchdog_task, this_cpu)) {
+			did_panic) {
 		return;
 	}
 
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index d7ffdc5..d68c77a 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -83,12 +83,13 @@ extern int sysctl_stat_interval;
 extern int latencytop_enabled;
 
 /* Constants used for minimum and  maximum */
-#if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM)
+#ifdef CONFIG_HIGHMEM
 static int one = 1;
 #endif
 
 #ifdef CONFIG_DETECT_SOFTLOCKUP
 static int sixty = 60;
+static int neg_one = -1;
 #endif
 
 #ifdef CONFIG_MMU
@@ -730,11 +731,11 @@ static struct ctl_table kern_table[] = {
 		.ctl_name	= CTL_UNNUMBERED,
 		.procname	= "softlockup_thresh",
 		.data		= &softlockup_thresh,
-		.maxlen		= sizeof(unsigned long),
+		.maxlen		= sizeof(int),
 		.mode		= 0644,
-		.proc_handler	= &proc_doulongvec_minmax,
+		.proc_handler	= &proc_dointvec_minmax,
 		.strategy	= &sysctl_intvec,
-		.extra1		= &one,
+		.extra1		= &neg_one,
 		.extra2		= &sixty,
 	},
 	{
-- 
1.5.4.rc3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Fix softlockup_thresh unaligned access and disable detection at runtime
  2008-05-02 12:56 [PATCH] Fix softlockup_thresh unaligned access and disable detection at runtime Dimitri Sivanich
@ 2008-05-04  9:02 ` Ingo Molnar
  0 siblings, 0 replies; 2+ messages in thread
From: Ingo Molnar @ 2008-05-04  9:02 UTC (permalink / raw)
  To: Dimitri Sivanich; +Cc: linux-kernel, Thomas Gleixner, Peter Zijlstra


* Dimitri Sivanich <sivanich@sgi.com> wrote:

> Fix unaligned access errors when setting softlockup_thresh on 64 bit 
> platforms.
> 
> Allow softlockup detection to be disabled by setting softlockup_thresh 
> <= 0.
> 
> Detect that boot time softlockup detection has been disabled earlier 
> in softlockup_tick.
> 
> Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>

applied, thanks Dimitri.

	Ingo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-05-04  9:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-02 12:56 [PATCH] Fix softlockup_thresh unaligned access and disable detection at runtime Dimitri Sivanich
2008-05-04  9:02 ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox