Skip to content

Commit

Permalink
Prevent voltage low warnings from filling log
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
James Hughes committed Apr 20, 2018
1 parent b6a574b commit 38c07e3
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions drivers/firmware/raspberrypi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down Expand Up @@ -216,9 +248,13 @@ static int rpi_firmware_get_throttled(struct rpi_firmware *fw, u32 *value)

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");
Expand Down

0 comments on commit 38c07e3

Please sign in to comment.