diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0278-Prevent-voltage-low-warnings-from-filling-log.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.14/950-0278-Prevent-voltage-low-warnings-from-filling-log.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0278-Prevent-voltage-low-warnings-from-filling-log.patch b/target/linux/brcm2708/patches-4.14/950-0278-Prevent-voltage-low-warnings-from-filling-log.patch new file mode 100644 index 0000000000..f83d6704d1 --- /dev/null +++ b/target/linux/brcm2708/patches-4.14/950-0278-Prevent-voltage-low-warnings-from-filling-log.patch @@ -0,0 +1,73 @@ +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"); |