From: Borislav Petkov <bp@alien8.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"Franck Bui" <fbui@suse.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Ingo Molnar" <mingo@kernel.org>,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Subject: [PATCH -v3.1 1/2] ratelimit: Extend to print suppressed messages on release
Date: Wed, 6 Jul 2016 15:28:00 +0200 [thread overview]
Message-ID: <20160706132800.GD7300@pd.tnic> (raw)
In-Reply-To: <1467642292-15671-2-git-send-email-bp@alien8.de>
From: Borislav Petkov <bp@suse.de>
Extend the ratelimiting facility to print the amount of suppressed lines
when it is being released.
Separated from a previous patch by Linus.
Also, make the ON_RELEASE image not use "callbacks" as it is misleading.
Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Franck Bui <fbui@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
v3.1: Simplify testing of !RATELIMIT_MSG_ON_RELEASE in ___ratelimit()
include/linux/ratelimit.h | 36 +++++++++++++++++++++++++++++++-----
lib/ratelimit.c | 15 +++++++++------
2 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h
index 18102529254e..1d8a17ee8395 100644
--- a/include/linux/ratelimit.h
+++ b/include/linux/ratelimit.h
@@ -2,11 +2,15 @@
#define _LINUX_RATELIMIT_H
#include <linux/param.h>
+#include <linux/sched.h>
#include <linux/spinlock.h>
#define DEFAULT_RATELIMIT_INTERVAL (5 * HZ)
#define DEFAULT_RATELIMIT_BURST 10
+/* issue num suppressed message on exit */
+#define RATELIMIT_MSG_ON_RELEASE BIT(0)
+
struct ratelimit_state {
raw_spinlock_t lock; /* protect the state */
@@ -15,6 +19,7 @@ struct ratelimit_state {
int printed;
int missed;
unsigned long begin;
+ unsigned long flags;
};
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \
@@ -34,12 +39,33 @@ struct ratelimit_state {
static inline void ratelimit_state_init(struct ratelimit_state *rs,
int interval, int burst)
{
+ memset(rs, 0, sizeof(*rs));
+
raw_spin_lock_init(&rs->lock);
- rs->interval = interval;
- rs->burst = burst;
- rs->printed = 0;
- rs->missed = 0;
- rs->begin = 0;
+ rs->interval = interval;
+ rs->burst = burst;
+}
+
+static inline void ratelimit_default_init(struct ratelimit_state *rs)
+{
+ return ratelimit_state_init(rs, DEFAULT_RATELIMIT_INTERVAL,
+ DEFAULT_RATELIMIT_BURST);
+}
+
+static inline void ratelimit_state_exit(struct ratelimit_state *rs)
+{
+ if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE))
+ return;
+
+ if (rs->missed)
+ printk(KERN_WARNING "%s: %d output lines suppressed due to ratelimiting\n",
+ current->comm, rs->missed);
+}
+
+static inline void
+ratelimit_set_flags(struct ratelimit_state *rs, unsigned long flags)
+{
+ rs->flags = flags;
}
extern struct ratelimit_state printk_ratelimit_state;
diff --git a/lib/ratelimit.c b/lib/ratelimit.c
index 2c5de86460c5..734cba5c8842 100644
--- a/lib/ratelimit.c
+++ b/lib/ratelimit.c
@@ -46,12 +46,15 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func)
rs->begin = jiffies;
if (time_is_before_jiffies(rs->begin + rs->interval)) {
- if (rs->missed)
- printk(KERN_WARNING "%s: %d callbacks suppressed\n",
- func, rs->missed);
- rs->begin = jiffies;
- rs->printed = 0;
- rs->missed = 0;
+ if (rs->missed) {
+ if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) {
+ pr_warn("%s: %d callbacks suppressed\n", func, rs->missed);
+ rs->missed = 0;
+ }
+
+ rs->begin = jiffies;
+ rs->printed = 0;
+ }
}
if (rs->burst && rs->burst > rs->printed) {
rs->printed++;
--
2.7.3
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
next prev parent reply other threads:[~2016-07-06 13:28 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-04 14:24 [PATCH -v3 0/2] printk.devkmsg: Ratelimit it by default Borislav Petkov
2016-07-04 14:24 ` [PATCH -v3 1/2] ratelimit: Extend to print suppressed messages on release Borislav Petkov
2016-07-05 18:26 ` Steven Rostedt
2016-07-05 18:45 ` Borislav Petkov
2016-07-05 18:57 ` Steven Rostedt
2016-07-05 19:42 ` Borislav Petkov
2016-07-05 19:49 ` Steven Rostedt
2016-07-05 20:08 ` Joe Perches
2016-07-05 20:53 ` Christian Borntraeger
2016-07-05 21:14 ` Paolo Bonzini
2016-07-05 21:23 ` Christian Borntraeger
2016-07-05 21:31 ` Borislav Petkov
2016-07-06 13:28 ` Borislav Petkov [this message]
2016-07-06 13:40 ` [PATCH -v3.1 " Steven Rostedt
2016-07-06 14:59 ` [PATCH -v3.2 " Borislav Petkov
2016-07-07 1:17 ` Steven Rostedt
2016-07-07 5:36 ` Borislav Petkov
2016-07-06 14:50 ` [PATCH -v3.1 " Joe Perches
2016-07-04 14:24 ` [PATCH -v3 2/2] printk: Add kernel parameter to control writes to /dev/kmsg Borislav Petkov
2016-07-05 21:47 ` Steven Rostedt
2016-07-05 22:02 ` Borislav Petkov
2016-07-05 22:08 ` Steven Rostedt
2016-07-06 13:29 ` [PATCH -v3.1 " Borislav Petkov
2016-07-06 17:52 ` Steven Rostedt
2016-07-06 18:32 ` Borislav Petkov
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=20160706132800.GD7300@pd.tnic \
--to=bp@alien8.de \
--cc=akpm@linux-foundation.org \
--cc=fbui@suse.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=torvalds@linux-foundation.org \
--cc=u.kleine-koenig@pengutronix.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.