|
@@ -232,6 +232,36 @@ void drm_err(const char *format, ...);
|
|
|
drm_ut_debug_printk(__func__, fmt, ##args); \
|
|
|
} while (0)
|
|
|
|
|
|
+#define _DRM_DEFINE_DEBUG_RATELIMITED(level, fmt, args...) \
|
|
|
+ do { \
|
|
|
+ if (unlikely(drm_debug & DRM_UT_ ## level)) { \
|
|
|
+ static DEFINE_RATELIMIT_STATE( \
|
|
|
+ _rs, \
|
|
|
+ DEFAULT_RATELIMIT_INTERVAL, \
|
|
|
+ DEFAULT_RATELIMIT_BURST); \
|
|
|
+ \
|
|
|
+ if (__ratelimit(&_rs)) { \
|
|
|
+ drm_ut_debug_printk(__func__, fmt, \
|
|
|
+ ##args); \
|
|
|
+ } \
|
|
|
+ } \
|
|
|
+ } while (0)
|
|
|
+
|
|
|
+/**
|
|
|
+ * Rate limited debug output. Like DRM_DEBUG() but won't flood the log.
|
|
|
+ *
|
|
|
+ * \param fmt printf() like format string.
|
|
|
+ * \param arg arguments
|
|
|
+ */
|
|
|
+#define DRM_DEBUG_RATELIMITED(fmt, args...) \
|
|
|
+ _DRM_DEFINE_DEBUG_RATELIMITED(CORE, fmt, ##args)
|
|
|
+#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, args...) \
|
|
|
+ _DRM_DEFINE_DEBUG_RATELIMITED(DRIVER, fmt, ##args)
|
|
|
+#define DRM_DEBUG_KMS_RATELIMITED(fmt, args...) \
|
|
|
+ _DRM_DEFINE_DEBUG_RATELIMITED(KMS, fmt, ##args)
|
|
|
+#define DRM_DEBUG_PRIME_RATELIMITED(fmt, args...) \
|
|
|
+ _DRM_DEFINE_DEBUG_RATELIMITED(PRIME, fmt, ##args)
|
|
|
+
|
|
|
/*@}*/
|
|
|
|
|
|
/***********************************************************************/
|