Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[RFC PATCH 1/2] sysctl: Make neg_one a standard constraint

5 views
Skip to first unread message

ato...@redhat.com

unread,
Jan 13, 2014, 12:20:02 PM1/13/14
to
From: Aaron Tomlin <ato...@redhat.com>

Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;
--
1.8.4.2

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

ato...@redhat.com

unread,
Jan 13, 2014, 12:20:05 PM1/13/14
to
From: Aaron Tomlin <ato...@redhat.com>

Enable hung_task_warnings to display every hung task warning, when
set to -1. While ULONG_MAX is practically "unlimited", this patch
takes it one step further. Note: The maximum is now 2^31-1 which
should (hopefully) be sufficient.

Please let me know your thoughts.

Aaron Tomlin (2):
sysctl: Make neg_one a standard constraint
hung_task: Display every hung task warning

include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 9 +++++----
kernel/sysctl.c | 6 ++++--
3 files changed, 10 insertions(+), 7 deletions(-)

ato...@redhat.com

unread,
Jan 13, 2014, 12:20:05 PM1/13/14
to
From: Aaron Tomlin <ato...@redhat.com>

Enable hung_task_warnings to display every hung
task warning when set to -1.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 9 +++++----
kernel/sysctl.c | 5 +++--
3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index 41467f8..eb3c72d7 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -5,7 +5,7 @@
extern int sysctl_hung_task_check_count;
extern unsigned int sysctl_hung_task_panic;
extern unsigned long sysctl_hung_task_timeout_secs;
-extern unsigned long sysctl_hung_task_warnings;
+extern int sysctl_hung_task_warnings;
extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
void __user *buffer,
size_t *lenp, loff_t *ppos);
diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index 9328b80..343ed70 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -37,7 +37,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
*/
unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;

-unsigned long __read_mostly sysctl_hung_task_warnings = 10;
+int __read_mostly sysctl_hung_task_warnings = 10;

static int __read_mostly did_panic;

@@ -98,11 +98,12 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)

if (!sysctl_hung_task_warnings)
return;
- sysctl_hung_task_warnings--;
+
+ if (sysctl_hung_task_warnings > 0)
+ sysctl_hung_task_warnings--;

/*
- * Ok, the task did not get scheduled for more than 2 minutes,
- * complain:
+ * Ok, the task did not get scheduled for a while, complain:
*/
pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n",
t->comm, t->pid, timeout);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dd531a6..b50cd13 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -985,9 +985,10 @@ static struct ctl_table kern_table[] = {
{
.procname = "hung_task_warnings",
.data = &sysctl_hung_task_warnings,
- .maxlen = sizeof(unsigned long),
+ .maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_doulongvec_minmax,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &neg_one,
},
#endif
#ifdef CONFIG_COMPAT

Rik van Riel

unread,
Jan 14, 2014, 9:20:04 AM1/14/14
to
On 01/13/2014 12:14 PM, ato...@redhat.com wrote:
> From: Aaron Tomlin <ato...@redhat.com>
>
> Add neg_one to the list of standard constraints.
>
> Signed-off-by: Aaron Tomlin <ato...@redhat.com>

Acked-by: Rik van Riel <ri...@redhat.com>

--
All rights reversed

Rik van Riel

unread,
Jan 14, 2014, 9:20:04 AM1/14/14
to
On 01/13/2014 12:14 PM, ato...@redhat.com wrote:
> From: Aaron Tomlin <ato...@redhat.com>
>
> Enable hung_task_warnings to display every hung
> task warning when set to -1.
>
> Signed-off-by: Aaron Tomlin <ato...@redhat.com>

Aaron and I talked on IRC, and after some talking these patches
now make sense to me :)

The kernel apparently limits how many hung task warnings it
will display at a time, when a timeout occurs. Aaron's patch
allows that limit to be set to "unlimited", which will cause
the kernel to display info about all hung tasks.

Reviewed-by: Rik van Riel <ri...@redhat.com>

--
All rights reversed

Ingo Molnar

unread,
Jan 14, 2014, 11:40:03 AM1/14/14
to

* Rik van Riel <ri...@redhat.com> wrote:

> On 01/13/2014 12:14 PM, ato...@redhat.com wrote:
> > From: Aaron Tomlin <ato...@redhat.com>
> >
> > Enable hung_task_warnings to display every hung
> > task warning when set to -1.
> >
> > Signed-off-by: Aaron Tomlin <ato...@redhat.com>
>
> Aaron and I talked on IRC, and after some talking these patches
> now make sense to me :)
>
> The kernel apparently limits how many hung task warnings it
> will display at a time, when a timeout occurs. Aaron's patch
> allows that limit to be set to "unlimited", which will cause
> the kernel to display info about all hung tasks.

The changelog needs to be updated with such kind of descriptive
information.

Thanks,

Ingo

ato...@redhat.com

unread,
Jan 14, 2014, 6:50:02 PM1/14/14
to
From: Aaron Tomlin <ato...@redhat.com>

The khungtaskd thread limits how many hung task warnings it displays
at a time, when a timeout occurs. This patch allows that limit to be
set to "unlimited", by setting hung_task_warnings to -1, which will
cause khungtaskd to display information about all hung tasks.

While ULONG_MAX is practically "inf", this patch takes it one step
further. Note: The maximum is now 2^31-1 (INT_MAX) which should
hopefully be sufficient.

Rebased against v3.13-rc8.

Aaron Tomlin (2):
sysctl: Make neg_one a standard constraint
hung_task: Display every hung task warning

include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 9 +++++----
kernel/sysctl.c | 6 ++++--
3 files changed, 10 insertions(+), 7 deletions(-)

--
1.8.4.2

ato...@redhat.com

unread,
Jan 14, 2014, 6:50:02 PM1/14/14
to
From: Aaron Tomlin <ato...@redhat.com>

Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;

ato...@redhat.com

unread,
Jan 14, 2014, 6:50:03 PM1/14/14
to
From: Aaron Tomlin <ato...@redhat.com>

The khungtaskd thread limits how many hung task
warnings it displays at a time, when a timeout
occurs. This patch allows that limit to be set
to "unlimited", by setting hung_task_warnings
to -1, which will cause khungtaskd to display
information about all hung tasks.

While ULONG_MAX is practically "inf", this
patch takes it one step further. Note: The
maximum is now 2^31-1 (INT_MAX) which should
hopefully be sufficient.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 9 +++++----
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dd531a6..b50cd13 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -985,9 +985,10 @@ static struct ctl_table kern_table[] = {
{
.procname = "hung_task_warnings",
.data = &sysctl_hung_task_warnings,
- .maxlen = sizeof(unsigned long),
+ .maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_doulongvec_minmax,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &neg_one,
},
#endif
#ifdef CONFIG_COMPAT

Andrew Morton

unread,
Jan 14, 2014, 7:20:02 PM1/14/14
to
On Tue, 14 Jan 2014 23:41:56 +0000 ato...@redhat.com wrote:

> The khungtaskd thread limits how many hung task warnings it displays
> at a time, when a timeout occurs. This patch allows that limit to be
> set to "unlimited", by setting hung_task_warnings to -1, which will
> cause khungtaskd to display information about all hung tasks.

The changelog provides no reason why you think this change should be
made. This is awkward, because it means that nobody has any reason
to apply the patch!

ato...@redhat.com

unread,
Jan 15, 2014, 11:30:02 AM1/15/14
to
From: Aaron Tomlin <ato...@redhat.com>

When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks. Sometimes
the information on why things are stuck is hidden
in those backtraces. Limiting the number of
backtraces being printed out can result in the user
not seeing the information necessary to debug the
issue. This patch introduces an option to print an
unlimited number of backtraces when khungtaskd
detects hung tasks.

While ULONG_MAX is practically "inf", this patch
takes it one step further. Note: The maximum is
now 2^31-1 (INT_MAX) which should hopefully be
sufficient.

Rebased against v3.13-rc8.

Aaron Tomlin (2):
sysctl: Make neg_one a standard constraint
hung_task: Display every hung task warning

include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 6 ++++--
3 files changed, 9 insertions(+), 5 deletions(-)

--
1.8.4.2

ato...@redhat.com

unread,
Jan 15, 2014, 11:30:02 AM1/15/14
to
From: Aaron Tomlin <ato...@redhat.com>

When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks. Sometimes
the information on why things are stuck is hidden
in those backtraces. Limiting the number of
backtraces being printed out can result in the user
not seeing the information necessary to debug the
issue. This patch introduces an option to print an
unlimited number of backtraces when khungtaskd
detects hung tasks.

While ULONG_MAX is practically "inf", this patch
takes it one step further. Note: The maximum is
now 2^31-1 (INT_MAX) which should hopefully be
sufficient.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 5 +++--
3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index 41467f8..eb3c72d7 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -5,7 +5,7 @@
extern int sysctl_hung_task_check_count;
extern unsigned int sysctl_hung_task_panic;
extern unsigned long sysctl_hung_task_timeout_secs;
-extern unsigned long sysctl_hung_task_warnings;
+extern int sysctl_hung_task_warnings;
extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
void __user *buffer,
size_t *lenp, loff_t *ppos);
diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index 9328b80..0b9c169 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -37,7 +37,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
*/
unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;

-unsigned long __read_mostly sysctl_hung_task_warnings = 10;
+int __read_mostly sysctl_hung_task_warnings = 10;

static int __read_mostly did_panic;

@@ -98,7 +98,9 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)

if (!sysctl_hung_task_warnings)
return;
- sysctl_hung_task_warnings--;
+
+ if (sysctl_hung_task_warnings > 0)
+ sysctl_hung_task_warnings--;

/*
* Ok, the task did not get scheduled for more than 2 minutes,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dd531a6..b50cd13 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -985,9 +985,10 @@ static struct ctl_table kern_table[] = {
{
.procname = "hung_task_warnings",
.data = &sysctl_hung_task_warnings,
- .maxlen = sizeof(unsigned long),
+ .maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_doulongvec_minmax,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &neg_one,
},
#endif
#ifdef CONFIG_COMPAT

ato...@redhat.com

unread,
Jan 15, 2014, 11:30:02 AM1/15/14
to
From: Aaron Tomlin <ato...@redhat.com>

Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;

David Rientjes

unread,
Jan 15, 2014, 4:00:02 PM1/15/14
to
On Wed, 15 Jan 2014, ato...@redhat.com wrote:

> From: Aaron Tomlin <ato...@redhat.com>
>
> When khungtaskd detects hung tasks, it prints out
> backtraces from a number of those tasks. Sometimes
> the information on why things are stuck is hidden
> in those backtraces. Limiting the number of
> backtraces being printed out can result in the user
> not seeing the information necessary to debug the
> issue. This patch introduces an option to print an
> unlimited number of backtraces when khungtaskd
> detects hung tasks.
>
> While ULONG_MAX is practically "inf", this patch
> takes it one step further. Note: The maximum is
> now 2^31-1 (INT_MAX) which should hopefully be
> sufficient.
>

This rationale is someone cryptic, it seems what you're doing is allowing
the sysctl to be set to -1 that will never limit the number of warnings
and to do that you need a signed value so you converted ulong to int.
hung_task_warnings isn't documented in the source, so how is anybody
supposed to know that -1 is an acceptable value and what it's special case
allows?

ato...@redhat.com

unread,
Jan 20, 2014, 12:40:01 PM1/20/14
to
From: Aaron Tomlin <ato...@redhat.com>

When khungtaskd detects hung tasks, it prints out backtraces from
a number of those tasks. Limiting the number of backtraces being
printed out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings sysctl
controls this feature.

This patch makes it possible for hung_task_warnings to accept a
special value to print an unlimited number of backtraces when
khungtaskd detects hung tasks.

The special value is -1. To use this value it is necessary to
change types from ulong to int.

Rebased against v3.13-rc8.

Changes since v3:
- Simplify the commit message (Rik van Riel and David Rientjes)
- Document hung_task_* sysctl parameters (David Rientjes)

Aaron Tomlin (2):
sysctl: Make neg_one a standard constraint
hung_task: Display every hung task warning

Documentation/sysctl/kernel.txt | 42 +++++++++++++++++++++++++++++++++++++++++
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 6 ++++--
4 files changed, 51 insertions(+), 5 deletions(-)

--
1.8.4.2

ato...@redhat.com

unread,
Jan 20, 2014, 12:40:01 PM1/20/14
to
From: Aaron Tomlin <ato...@redhat.com>

Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Acked-by: Rik van Riel <ri...@redhat.com>

---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;

ato...@redhat.com

unread,
Jan 20, 2014, 12:40:02 PM1/20/14
to
From: Aaron Tomlin <ato...@redhat.com>

When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks.
Limiting the number of backtraces being printed
out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings
sysctl controls this feature.

This patch makes it possible for hung_task_warnings
to accept a special value to print an unlimited
number of backtraces when khungtaskd detects hung
tasks.

The special value is -1. To use this value it is
necessary to change types from ulong to int.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Reviewed-by: Rik van Riel <ri...@redhat.com>

---
Documentation/sysctl/kernel.txt | 42 +++++++++++++++++++++++++++++++++++++++++
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 5 +++--
4 files changed, 50 insertions(+), 5 deletions(-)

diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 26b7ee4..ff1a167 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -33,6 +33,10 @@ show up in /proc/sys/kernel:
- domainname
- hostname
- hotplug
+- hung_task_panic
+- hung_task_check_count
+- hung_task_timeout_secs
+- hung_task_warnings
- kptr_restrict
- kstack_depth_to_print [ X86 only ]
- l2cr [ PPC only ]
@@ -287,6 +291,44 @@ Default value is "/sbin/hotplug".

==============================================================

+hung_task_panic:
+
+Controls the kernel's behavior when a hung task is detected.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+0: continue operation. This is the default behavior.
+
+1: panic immediately.
+
+==============================================================
+
+hung_task_check_count:
+
+The upper bound on the number of tasks that are checked.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+==============================================================
+
+hung_task_timeout_secs:
+
+Check interval. When a task in D state did not get scheduled
+for more than this value report a warning.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+0: means infinite timeout - no checking done.
+
+==============================================================
+
+hung_task_warning:
+
+The maximum number of warnings to report. During a check interval
+When this value is reached, no more the warnings will be reported.
+This file shows up if CONFIG_DETECT_HUNG_TASK is enabled.
+
+-1: report an infinite number of warnings.
+
+==============================================================
+
kptr_restrict:

This toggle indicates whether restrictions are placed on
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index dd531a6..b50cd13 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -985,9 +985,10 @@ static struct ctl_table kern_table[] = {
{
.procname = "hung_task_warnings",
.data = &sysctl_hung_task_warnings,
- .maxlen = sizeof(unsigned long),
+ .maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_doulongvec_minmax,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &neg_one,
},
#endif
#ifdef CONFIG_COMPAT

David Rientjes

unread,
Jan 22, 2014, 12:30:02 AM1/22/14
to
On Mon, 20 Jan 2014, ato...@redhat.com wrote:

> From: Aaron Tomlin <ato...@redhat.com>
>
> When khungtaskd detects hung tasks, it prints out
> backtraces from a number of those tasks.
> Limiting the number of backtraces being printed
> out can result in the user not seeing the information
> necessary to debug the issue. The hung_task_warnings
> sysctl controls this feature.
>
> This patch makes it possible for hung_task_warnings
> to accept a special value to print an unlimited
> number of backtraces when khungtaskd detects hung
> tasks.
>
> The special value is -1. To use this value it is
> necessary to change types from ulong to int.
>
> Signed-off-by: Aaron Tomlin <ato...@redhat.com>
> Reviewed-by: Rik van Riel <ri...@redhat.com>

Acked-by: David Rientjes <rien...@google.com>

Nice documentation updates!

David Rientjes

unread,
Jan 22, 2014, 12:30:02 AM1/22/14
to
On Mon, 20 Jan 2014, ato...@redhat.com wrote:

> From: Aaron Tomlin <ato...@redhat.com>
>
> Add neg_one to the list of standard constraints.
>
> Signed-off-by: Aaron Tomlin <ato...@redhat.com>
> Acked-by: Rik van Riel <ri...@redhat.com>

Acked-by: David Rientjes <rien...@google.com>

Aaron Tomlin

unread,
Jan 23, 2014, 6:00:01 AM1/23/14
to
When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks.
Limiting the number of backtraces being printed
out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings
sysctl controls this feature.

This patch makes it possible for hung_task_warnings
to accept a special value to print an unlimited
number of backtraces when khungtaskd detects hung
tasks.

The special value is -1. To use this value it is
necessary to change types from ulong to int.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Reviewed-by: Rik van Riel <ri...@redhat.com>
Acked-by: David Rientjes <rien...@google.com>
---
Documentation/sysctl/kernel.txt | 43 +++++++++++++++++++++++++++++++++++++++++
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 5 +++--
4 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 26b7ee4..aff1d31 100644
--- a/Documentation/sysctl/kernel.txt
+++ b/Documentation/sysctl/kernel.txt
@@ -33,6 +33,10 @@ show up in /proc/sys/kernel:
- domainname
- hostname
- hotplug
+- hung_task_panic
+- hung_task_check_count
+- hung_task_timeout_secs
+- hung_task_warnings
- kptr_restrict
- kstack_depth_to_print [ X86 only ]
- l2cr [ PPC only ]
@@ -287,6 +291,45 @@ Default value is "/sbin/hotplug".
+if a hung task is detected, this value is decreased by 1.
+When this value reaches 0, no more warnings will be reported.

Aaron Tomlin

unread,
Jan 23, 2014, 6:00:02 AM1/23/14
to
When khungtaskd detects hung tasks, it prints out backtraces from
a number of those tasks. Limiting the number of backtraces being
printed out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings sysctl
controls this feature.

This patch makes it possible for hung_task_warnings to accept a
special value to print an unlimited number of backtraces when
khungtaskd detects hung tasks.

The special value is -1. To use this value it is necessary to
change types from ulong to int.

Rebased against v3.13-rc8.

Changes since v4:
- Improve the documentation on hung_task_warnings

Changes since v3:
- Simplify the commit message (Rik van Riel and David Rientjes)
- Document hung_task_* sysctl parameters (David Rientjes)

Aaron Tomlin (2):
sysctl: Make neg_one a standard constraint
hung_task: Display every hung task warning

Documentation/sysctl/kernel.txt | 42 +++++++++++++++++++++++++++++++++++++++++
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 6 ++++--
4 files changed, 51 insertions(+), 5 deletions(-)

Aaron Tomlin

unread,
Jan 23, 2014, 6:00:02 AM1/23/14
to
Add neg_one to the list of standard constraints.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Acked-by: Rik van Riel <ri...@redhat.com>
Acked-by: David Rientjes <rien...@google.com>
---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 34a6047..dd531a6 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;

Ingo Molnar

unread,
Jan 25, 2014, 3:50:01 AM1/25/14
to

* Aaron Tomlin <ato...@redhat.com> wrote:

> Add neg_one to the list of standard constraints.
>
> Signed-off-by: Aaron Tomlin <ato...@redhat.com>
> Acked-by: Rik van Riel <ri...@redhat.com>
> Acked-by: David Rientjes <rien...@google.com>
> ---
> kernel/sysctl.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index 34a6047..dd531a6 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
> static int sixty = 60;
> #endif
>
> +static int neg_one = -1;
> static int zero;
> static int __maybe_unused one = 1;
> static int __maybe_unused two = 2;

So what happens if CONFIG_DETECT_HUNG_TASK is not defined and neg_one
is unused? The compiler generates an unused variable warning.

Thanks,

Ingo

Ingo Molnar

unread,
Jan 25, 2014, 4:00:01 AM1/25/14
to

* Ingo Molnar <mi...@kernel.org> wrote:

>
> * Aaron Tomlin <ato...@redhat.com> wrote:
>
> > Add neg_one to the list of standard constraints.
> >
> > Signed-off-by: Aaron Tomlin <ato...@redhat.com>
> > Acked-by: Rik van Riel <ri...@redhat.com>
> > Acked-by: David Rientjes <rien...@google.com>
> > ---
> > kernel/sysctl.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > index 34a6047..dd531a6 100644
> > --- a/kernel/sysctl.c
> > +++ b/kernel/sysctl.c
> > @@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
> > static int sixty = 60;
> > #endif
> >
> > +static int neg_one = -1;
> > static int zero;
> > static int __maybe_unused one = 1;
> > static int __maybe_unused two = 2;
>
> So what happens if CONFIG_DETECT_HUNG_TASK is not defined and
> neg_one is unused? The compiler generates an unused variable
> warning.

Note, I fixed this up in your patch, no need to resend.

tip-bot for Aaron Tomlin

unread,
Jan 25, 2014, 9:30:02 AM1/25/14
to
Commit-ID: 2397efb1bb17595b35f31abb40d95074ebc04f1b
Gitweb: http://git.kernel.org/tip/2397efb1bb17595b35f31abb40d95074ebc04f1b
Author: Aaron Tomlin <ato...@redhat.com>
AuthorDate: Mon, 20 Jan 2014 17:34:12 +0000
Committer: Ingo Molnar <mi...@kernel.org>
CommitDate: Sat, 25 Jan 2014 08:59:53 +0100

sysctl: Add neg_one as a standard constraint

Add neg_one to the list of standard constraints - will be used by the next patch.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Acked-by: Rik van Riel <ri...@redhat.com>
Acked-by: David Rientjes <rien...@google.com>
Cc: ol...@redhat.com
Link: http://lkml.kernel.org/r/1390239253-24030-2-g...@redhat.com
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
kernel/sysctl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index c8da99f..c398a58 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,6 +122,7 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

+static int neg_one = -1;
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;
--

tip-bot for Aaron Tomlin

unread,
Jan 25, 2014, 9:30:02 AM1/25/14
to
Commit-ID: 270750dbc18a71b23d660df110e433ff9616a2d4
Gitweb: http://git.kernel.org/tip/270750dbc18a71b23d660df110e433ff9616a2d4
Author: Aaron Tomlin <ato...@redhat.com>
AuthorDate: Mon, 20 Jan 2014 17:34:13 +0000
Committer: Ingo Molnar <mi...@kernel.org>
CommitDate: Sat, 25 Jan 2014 12:13:33 +0100

hung_task: Display every hung task warning

When khungtaskd detects hung tasks, it prints out
backtraces from a number of those tasks.

Limiting the number of backtraces being printed
out can result in the user not seeing the information
necessary to debug the issue. The hung_task_warnings
sysctl controls this feature.

This patch makes it possible for hung_task_warnings
to accept a special value to print an unlimited
number of backtraces when khungtaskd detects hung
tasks.

The special value is -1. To use this value it is
necessary to change types from ulong to int.

Signed-off-by: Aaron Tomlin <ato...@redhat.com>
Reviewed-by: Rik van Riel <ri...@redhat.com>
Acked-by: David Rientjes <rien...@google.com>
Cc: ol...@redhat.com
Link: http://lkml.kernel.org/r/1390239253-24030-3-g...@redhat.com
[ Build warning fix. ]
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
Documentation/sysctl/kernel.txt | 42 +++++++++++++++++++++++++++++++++++++++++
include/linux/sched/sysctl.h | 2 +-
kernel/hung_task.c | 6 ++++--
kernel/sysctl.c | 8 +++++---
4 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt
index 6d48640..4205f3c 100644
index 31e0193..3a93f84 100644
index c398a58..dd5b449 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -122,7 +122,8 @@ extern int blk_iopoll_enabled;
static int sixty = 60;
#endif

-static int neg_one = -1;
+static int __maybe_unused neg_one = -1;
+
static int zero;
static int __maybe_unused one = 1;
static int __maybe_unused two = 2;
@@ -978,9 +979,10 @@ static struct ctl_table kern_table[] = {
{
.procname = "hung_task_warnings",
.data = &sysctl_hung_task_warnings,
- .maxlen = sizeof(unsigned long),
+ .maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_doulongvec_minmax,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &neg_one,
},
#endif
#ifdef CONFIG_COMPAT
--
0 new messages