|
@@ -31,6 +31,7 @@
|
|
|
#include <linux/security.h>
|
|
|
#include <linux/bootmem.h>
|
|
|
#include <linux/syscalls.h>
|
|
|
+#include <linux/jiffies.h>
|
|
|
|
|
|
#include <asm/uaccess.h>
|
|
|
|
|
@@ -1101,3 +1102,23 @@ int printk_ratelimit(void)
|
|
|
printk_ratelimit_burst);
|
|
|
}
|
|
|
EXPORT_SYMBOL(printk_ratelimit);
|
|
|
+
|
|
|
+/**
|
|
|
+ * printk_timed_ratelimit - caller-controlled printk ratelimiting
|
|
|
+ * @caller_jiffies: pointer to caller's state
|
|
|
+ * @interval_msecs: minimum interval between prints
|
|
|
+ *
|
|
|
+ * printk_timed_ratelimit() returns true if more than @interval_msecs
|
|
|
+ * milliseconds have elapsed since the last time printk_timed_ratelimit()
|
|
|
+ * returned true.
|
|
|
+ */
|
|
|
+bool printk_timed_ratelimit(unsigned long *caller_jiffies,
|
|
|
+ unsigned int interval_msecs)
|
|
|
+{
|
|
|
+ if (*caller_jiffies == 0 || time_after(jiffies, *caller_jiffies)) {
|
|
|
+ *caller_jiffies = jiffies + msecs_to_jiffies(interval_msecs);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(printk_timed_ratelimit);
|