|
@@ -1118,6 +1118,41 @@ do { \
|
|
|
})
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_PRINTK
|
|
|
+#define dev_level_once(dev_level, dev, fmt, ...) \
|
|
|
+do { \
|
|
|
+ static bool __print_once __read_mostly; \
|
|
|
+ \
|
|
|
+ if (!__print_once) { \
|
|
|
+ __print_once = true; \
|
|
|
+ dev_level(dev, fmt, ##__VA_ARGS__); \
|
|
|
+ } \
|
|
|
+} while (0)
|
|
|
+#else
|
|
|
+#define dev_level_once(dev_level, dev, fmt, ...) \
|
|
|
+do { \
|
|
|
+ if (0) \
|
|
|
+ dev_level(dev, fmt, ##__VA_ARGS__); \
|
|
|
+} while (0)
|
|
|
+#endif
|
|
|
+
|
|
|
+#define dev_emerg_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_emerg, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_alert_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_alert, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_crit_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_crit, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_err_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_err, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_warn_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_warn, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_notice_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_notice, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_info_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_info, dev, fmt, ##__VA_ARGS__)
|
|
|
+#define dev_dbg_once(dev, fmt, ...) \
|
|
|
+ dev_level_once(dev_info, dev, fmt, ##__VA_ARGS__)
|
|
|
+
|
|
|
#define dev_level_ratelimited(dev_level, dev, fmt, ...) \
|
|
|
do { \
|
|
|
static DEFINE_RATELIMIT_STATE(_rs, \
|