You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
From cecce8a9e798fbe8571381b6f9f69fd7a0defa37 Mon Sep 17 00:00:00 2001
|
|
From: James Hughes <james.hughes@raspberrypi.org>
|
|
Date: Wed, 18 Apr 2018 13:02:57 +0100
|
|
Subject: [PATCH 278/454] Prevent voltage low warnings from filling log
|
|
|
|
Although the correct fix for low voltage warnings is to
|
|
improve the power supply, the current implementation
|
|
of the detection can fill the log if the warning
|
|
happens freqently. This replaces the logging with
|
|
slightly custom ratelimited logging.
|
|
|
|
Signed-off-by: James Hughes <james.hughes@raspberrypi.org>
|
|
---
|
|
drivers/firmware/raspberrypi.c | 40 ++++++++++++++++++++++++++++++++--
|
|
1 file changed, 38 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/firmware/raspberrypi.c
|
|
+++ b/drivers/firmware/raspberrypi.c
|
|
@@ -24,6 +24,38 @@
|
|
|
|
#define UNDERVOLTAGE_BIT BIT(0)
|
|
|
|
+
|
|
+/*
|
|
+ * This section defines some rate limited logging that prevent
|
|
+ * repeated messages at much lower Hz than the default kernel settings.
|
|
+ * It's usually 5s, this is 5 minutes.
|
|
+ * Burst 3 means you may get three messages 'quickly', before
|
|
+ * the ratelimiting kicks in.
|
|
+ */
|
|
+#define LOCAL_RATELIMIT_INTERVAL (5 * 60 * HZ)
|
|
+#define LOCAL_RATELIMIT_BURST 3
|
|
+
|
|
+#ifdef CONFIG_PRINTK
|
|
+#define printk_ratelimited_local(fmt, ...) \
|
|
+({ \
|
|
+ static DEFINE_RATELIMIT_STATE(_rs, \
|
|
+ LOCAL_RATELIMIT_INTERVAL, \
|
|
+ LOCAL_RATELIMIT_BURST); \
|
|
+ \
|
|
+ if (__ratelimit(&_rs)) \
|
|
+ printk(fmt, ##__VA_ARGS__); \
|
|
+})
|
|
+#else
|
|
+#define printk_ratelimited_local(fmt, ...) \
|
|
+ no_printk(fmt, ##__VA_ARGS__)
|
|
+#endif
|
|
+
|
|
+#define pr_crit_ratelimited_local(fmt, ...) \
|
|
+ printk_ratelimited_local(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
|
|
+#define pr_info_ratelimited_local(fmt, ...) \
|
|
+ printk_ratelimited_local(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
|
|
+
|
|
+
|
|
struct rpi_firmware {
|
|
struct mbox_client cl;
|
|
struct mbox_chan *chan; /* The property channel. */
|
|
@@ -216,9 +248,13 @@ static int rpi_firmware_get_throttled(st
|
|
|
|
if (new_uv != old_uv) {
|
|
if (new_uv)
|
|
- pr_crit("Under-voltage detected! (0x%08x)\n", *value);
|
|
+ pr_crit_ratelimited_local(
|
|
+ "Under-voltage detected! (0x%08x)\n",
|
|
+ *value);
|
|
else
|
|
- pr_info("Voltage normalised (0x%08x)\n", *value);
|
|
+ pr_info_ratelimited_local(
|
|
+ "Voltage normalised (0x%08x)\n",
|
|
+ *value);
|
|
}
|
|
|
|
sysfs_notify(&fw->cl.dev->kobj, NULL, "get_throttled");
|
|
|