|
@@ -23,6 +23,7 @@
|
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/pm.h>
|
|
|
#include <linux/atomic.h>
|
|
|
+#include <linux/ratelimit.h>
|
|
|
#include <asm/device.h>
|
|
|
|
|
|
struct device;
|
|
@@ -933,6 +934,32 @@ int _dev_info(const struct device *dev, const char *fmt, ...)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
+#define dev_level_ratelimited(dev_level, dev, fmt, ...) \
|
|
|
+do { \
|
|
|
+ static DEFINE_RATELIMIT_STATE(_rs, \
|
|
|
+ DEFAULT_RATELIMIT_INTERVAL, \
|
|
|
+ DEFAULT_RATELIMIT_BURST); \
|
|
|
+ if (__ratelimit(&_rs)) \
|
|
|
+ dev_level(dev, fmt, ##__VA_ARGS__); \
|
|
|
+} while (0)
|
|
|
+
|
|
|
+#define dev_emerg_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_emerg, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_alert_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_alert, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_crit_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_crit, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_err_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_err, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_warn_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_warn, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_notice_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_info_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_dbg_ratelimited(dev, fmt, ...) \
|
|
|
+ dev_level_ratelimited(dev_dbg, dev, fmt, ##__VA_ARGS__)
|
|
|
+
|
|
|
/*
|
|
|
* Stupid hackaround for existing uses of non-printk uses dev_info
|
|
|
*
|