All of lore.kernel.org
 help / color / mirror / Atom feed
From: nooiwa <nooiwa@miraclelinux.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: roland@redhat.com, akpm@linux-foundation.org, oleg@redhat.com,
	LKML <linux-kernel@vger.kernel.org>,
	h-shimamoto@ct.jp.nec.com, Thomas Gleixner <tglx@linutronix.de>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [PATCH] show message when exceeded rlimit of pending signals
Date: Mon, 26 Oct 2009 19:17:41 +0900	[thread overview]
Message-ID: <4AE57745.8080701@miraclelinux.com> (raw)
In-Reply-To: <20091024085848.GA23215@elte.hu>

Hi Ingo

I remade a patch.

I already tested it. The result was good for me.
Could you please check it.

Thanks you.
Naohiro Ooiwa


Signed-off-by: Naohiro Ooiwa <nooiwa@miraclelinux.com>
---
 Documentation/kernel-parameters.txt |   14 ++++++++++++++
 kernel/signal.c                     |   24 +++++++++++++++++++++++-
 kernel/sysctl.c                     |    9 +++++++++
 3 files changed, 46 insertions(+), 1 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 9107b38..37104b1 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2036,6 +2036,20 @@ and is between 256 and 4096 characters. It is defined in the file
 			the kernel console.
 			default: off.

+	print-reach-rlimit-sigpending=
+			[KNL] debug: print caution that reached the limit of
+			pending signals.
+			If your working system may have too many POSIX.1 timers
+			or during the system test, you may as well to enable
+			this parameter.
+			print-reach-rlimit-sigpending=0: disable this print
+			print-reach-rlimit-sigpending=1: print message that
+			reached	the limit of pending signals to the kernel
+			console.
+			When this message is printed, maybe you should try to
+			"ulimit -i unlimited".
+			default: off.
+
 	printk.time=	Show timing data prefixed to each printk message line
 			Format: <bool>  (1/Y/y=enable, 0/N/n=disable)

diff --git a/kernel/signal.c b/kernel/signal.c
index 6705320..9943e71 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -188,6 +188,24 @@ int next_signal(struct sigpending *pending, sigset_t *mask)
 	return sig;
 }

+int print_reach_rlimit_sigpending;
+
+static void show_reach_rlimit_sigpending(void)
+{
+	if (printk_ratelimit())
+		printk(KERN_WARNING "%s/%d: reached the limit of
+			pending signals.\n", current->comm, current->pid);
+}
+
+static int __init setup_print_reach_rlimit_sigpending(char *str)
+{
+	get_option(&str, &print_reach_rlimit_sigpending);
+
+	return 1;
+}
+
+__setup("print-reach-rlimit-sigpending=", setup_print_reach_rlimit_sigpending);
+
 /*
  * allocate a new signal queue record
  * - this may be called without locks if and only if t == current, otherwise an
@@ -209,8 +227,12 @@ static struct sigqueue *__sigqueue_alloc(struct task_struct *t, gfp_t flags,
 	atomic_inc(&user->sigpending);
 	if (override_rlimit ||
 	    atomic_read(&user->sigpending) <=
-			t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur)
+			t->signal->rlim[RLIMIT_SIGPENDING].rlim_cur) {
 		q = kmem_cache_alloc(sigqueue_cachep, flags);
+	} else {
+		if (print_reach_rlimit_sigpending)
+			show_reach_rlimit_sigpending();
+	}
 	if (unlikely(q == NULL)) {
 		atomic_dec(&user->sigpending);
 		free_uid(user);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 0d949c5..93b2760 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -67,6 +67,7 @@ static int deprecated_sysctl_warning(struct __sysctl_args *args);
 /* External variables not in a header file. */
 extern int C_A_D;
 extern int print_fatal_signals;
+extern int print_reach_rlimit_sigpending;
 extern int sysctl_overcommit_memory;
 extern int sysctl_overcommit_ratio;
 extern int sysctl_panic_on_oom;
@@ -467,6 +468,14 @@ static struct ctl_table kern_table[] = {
 		.mode		= 0644,
 		.proc_handler	= &proc_dointvec,
 	},
+	{
+		.ctl_name	= CTL_UNNUMBERED,
+		.procname	= "print-reach-rlimit-sigpending",
+		.data		= &print_reach_rlimit_sigpending,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #ifdef CONFIG_SPARC
 	{
 		.ctl_name	= KERN_SPARC_REBOOT,
-- 1.5.4.1

Ingo Molnar wrote:
> * Naohiro Ooiwa <nooiwa@miraclelinux.com> wrote:
> 
>> Hi Ingo, Roland,
>>
>> Now, I received a nice comment from OGAWA-san.
>> How is this impriment like a print_faital_signal().
>>
>> I think it's very nice.
> 
> Agreed - i just wanted to suggest that too. print_fatal_signals is 
> already a switch that turns on warnings about 'weird looking signal 
> behavior'. print-on-overflow seems like a good match.
> 
> 	Ingo




  reply	other threads:[~2009-10-26 10:17 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-23 10:07 [PATCH] show message when exceeded rlimit of pending signals Naohiro Ooiwa
2009-10-23 11:46 ` Ingo Molnar
2009-10-24  7:02   ` Naohiro Ooiwa
2009-10-24  8:56     ` Naohiro Ooiwa
2009-10-24  8:58       ` Ingo Molnar
2009-10-26 10:17         ` nooiwa [this message]
2009-10-26 11:38           ` Ingo Molnar
2009-10-26 16:37             ` Roland McGrath
2009-10-26 16:39             ` Naohiro Ooiwa
2009-10-26 20:28               ` Ingo Molnar
2009-10-27  2:58                 ` Naohiro Ooiwa
2009-10-27  4:36                   ` Hiroshi Shimamoto
2009-10-27  8:27                     ` nooiwa
2009-10-23 21:07 ` Roland McGrath
2009-10-24  8:27   ` Naohiro Ooiwa
  -- strict thread matches above, loose matches on Subject: below --
2009-10-30 11:36 Naohiro Ooiwa
2009-10-30 21:33 ` Andrew Morton
2009-10-30 21:45   ` Joe Perches
2009-10-31  7:58   ` Naohiro Ooiwa
2009-10-31  8:50     ` Naohiro Ooiwa
2009-10-31  8:57       ` Andrew Morton
2009-10-31 11:05         ` Naohiro Ooiwa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AE57745.8080701@miraclelinux.com \
    --to=nooiwa@miraclelinux.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=h-shimamoto@ct.jp.nec.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=oleg@redhat.com \
    --cc=roland@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.