|
@@ -233,6 +233,8 @@ extern asmlinkage void dump_stack(void) __cold;
|
|
|
no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
|
|
#endif
|
|
|
|
|
|
+#include <linux/dynamic_debug.h>
|
|
|
+
|
|
|
/* If you are writing a driver, please use dev_dbg instead */
|
|
|
#if defined(CONFIG_DYNAMIC_DEBUG)
|
|
|
/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
|
|
@@ -343,7 +345,19 @@ extern asmlinkage void dump_stack(void) __cold;
|
|
|
#endif
|
|
|
|
|
|
/* If you are writing a driver, please use dev_dbg instead */
|
|
|
-#if defined(DEBUG)
|
|
|
+#if defined(CONFIG_DYNAMIC_DEBUG)
|
|
|
+/* descriptor check is first to prevent flooding with "callbacks suppressed" */
|
|
|
+#define pr_debug_ratelimited(fmt, ...) \
|
|
|
+do { \
|
|
|
+ static DEFINE_RATELIMIT_STATE(_rs, \
|
|
|
+ DEFAULT_RATELIMIT_INTERVAL, \
|
|
|
+ DEFAULT_RATELIMIT_BURST); \
|
|
|
+ DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
|
|
+ if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) && \
|
|
|
+ __ratelimit(&_rs)) \
|
|
|
+ __dynamic_pr_debug(&descriptor, fmt, ##__VA_ARGS__); \
|
|
|
+} while (0)
|
|
|
+#elif defined(DEBUG)
|
|
|
#define pr_debug_ratelimited(fmt, ...) \
|
|
|
printk_ratelimited(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
|
|
|
#else
|