aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_drv.c27
-rw-r--r--include/drm/drmP.h140
2 files changed, 103 insertions, 64 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 57ce9734e0c6..a7f628298365 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -63,37 +63,48 @@ static struct idr drm_minors_idr;
63 63
64static struct dentry *drm_debugfs_root; 64static struct dentry *drm_debugfs_root;
65 65
66void drm_err(const char *format, ...) 66#define DRM_PRINTK_FMT "[" DRM_NAME ":%s]%s %pV"
67
68void drm_dev_printk(const struct device *dev, const char *level,
69 unsigned int category, const char *function_name,
70 const char *prefix, const char *format, ...)
67{ 71{
68 struct va_format vaf; 72 struct va_format vaf;
69 va_list args; 73 va_list args;
70 74
71 va_start(args, format); 75 if (category != DRM_UT_NONE && !(drm_debug & category))
76 return;
72 77
78 va_start(args, format);
73 vaf.fmt = format; 79 vaf.fmt = format;
74 vaf.va = &args; 80 vaf.va = &args;
75 81
76 printk(KERN_ERR "[" DRM_NAME ":%ps] *ERROR* %pV", 82 dev_printk(level, dev, DRM_PRINTK_FMT, function_name, prefix,
77 __builtin_return_address(0), &vaf); 83 &vaf);
78 84
79 va_end(args); 85 va_end(args);
80} 86}
81EXPORT_SYMBOL(drm_err); 87EXPORT_SYMBOL(drm_dev_printk);
82 88
83void drm_ut_debug_printk(const char *function_name, const char *format, ...) 89void drm_printk(const char *level, unsigned int category,
90 const char *function_name, const char *prefix,
91 const char *format, ...)
84{ 92{
85 struct va_format vaf; 93 struct va_format vaf;
86 va_list args; 94 va_list args;
87 95
96 if (category != DRM_UT_NONE && !(drm_debug & category))
97 return;
98
88 va_start(args, format); 99 va_start(args, format);
89 vaf.fmt = format; 100 vaf.fmt = format;
90 vaf.va = &args; 101 vaf.va = &args;
91 102
92 printk(KERN_DEBUG "[" DRM_NAME ":%s] %pV", function_name, &vaf); 103 printk("%s" DRM_PRINTK_FMT, level, function_name, prefix, &vaf);
93 104
94 va_end(args); 105 va_end(args);
95} 106}
96EXPORT_SYMBOL(drm_ut_debug_printk); 107EXPORT_SYMBOL(drm_printk);
97 108
98/* 109/*
99 * DRM Minors 110 * DRM Minors
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index f8e87fde611b..94eb138753a9 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -127,6 +127,7 @@ struct dma_buf_attachment;
127 * run-time by echoing the debug value in its sysfs node: 127 * run-time by echoing the debug value in its sysfs node:
128 * # echo 0xf > /sys/module/drm/parameters/debug 128 * # echo 0xf > /sys/module/drm/parameters/debug
129 */ 129 */
130#define DRM_UT_NONE 0x00
130#define DRM_UT_CORE 0x01 131#define DRM_UT_CORE 0x01
131#define DRM_UT_DRIVER 0x02 132#define DRM_UT_DRIVER 0x02
132#define DRM_UT_KMS 0x04 133#define DRM_UT_KMS 0x04
@@ -134,11 +135,15 @@ struct dma_buf_attachment;
134#define DRM_UT_ATOMIC 0x10 135#define DRM_UT_ATOMIC 0x10
135#define DRM_UT_VBL 0x20 136#define DRM_UT_VBL 0x20
136 137
137extern __printf(2, 3) 138extern __printf(6, 7)
138void drm_ut_debug_printk(const char *function_name, 139void drm_dev_printk(const struct device *dev, const char *level,
139 const char *format, ...); 140 unsigned int category, const char *function_name,
140extern __printf(1, 2) 141 const char *prefix, const char *format, ...);
141void drm_err(const char *format, ...); 142
143extern __printf(5, 6)
144void drm_printk(const char *level, unsigned int category,
145 const char *function_name, const char *prefix,
146 const char *format, ...);
142 147
143/***********************************************************************/ 148/***********************************************************************/
144/** \name DRM template customization defaults */ 149/** \name DRM template customization defaults */
@@ -169,8 +174,12 @@ void drm_err(const char *format, ...);
169 * \param fmt printf() like format string. 174 * \param fmt printf() like format string.
170 * \param arg arguments 175 * \param arg arguments
171 */ 176 */
172#define DRM_ERROR(fmt, ...) \ 177#define DRM_DEV_ERROR(dev, fmt, ...) \
173 drm_err(fmt, ##__VA_ARGS__) 178 drm_dev_printk(dev, KERN_ERR, DRM_UT_NONE, __func__, " *ERROR*",\
179 fmt, ##__VA_ARGS__)
180#define DRM_ERROR(fmt, ...) \
181 drm_printk(KERN_ERR, DRM_UT_NONE, __func__, " *ERROR*", fmt, \
182 ##__VA_ARGS__)
174 183
175/** 184/**
176 * Rate limited error output. Like DRM_ERROR() but won't flood the log. 185 * Rate limited error output. Like DRM_ERROR() but won't flood the log.
@@ -178,21 +187,33 @@ void drm_err(const char *format, ...);
178 * \param fmt printf() like format string. 187 * \param fmt printf() like format string.
179 * \param arg arguments 188 * \param arg arguments
180 */ 189 */
181#define DRM_ERROR_RATELIMITED(fmt, ...) \ 190#define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \
182({ \ 191({ \
183 static DEFINE_RATELIMIT_STATE(_rs, \ 192 static DEFINE_RATELIMIT_STATE(_rs, \
184 DEFAULT_RATELIMIT_INTERVAL, \ 193 DEFAULT_RATELIMIT_INTERVAL, \
185 DEFAULT_RATELIMIT_BURST); \ 194 DEFAULT_RATELIMIT_BURST); \
186 \ 195 \
187 if (__ratelimit(&_rs)) \ 196 if (__ratelimit(&_rs)) \
188 drm_err(fmt, ##__VA_ARGS__); \ 197 DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \
189}) 198})
199#define DRM_ERROR_RATELIMITED(fmt, ...) \
200 DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__)
190 201
191#define DRM_INFO(fmt, ...) \ 202#define DRM_DEV_INFO(dev, fmt, ...) \
192 printk(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__) 203 drm_dev_printk(dev, KERN_INFO, DRM_UT_NONE, __func__, "", fmt, \
204 ##__VA_ARGS__)
205#define DRM_INFO(fmt, ...) \
206 drm_printk(KERN_INFO, DRM_UT_NONE, __func__, "", fmt, ##__VA_ARGS__)
193 207
194#define DRM_INFO_ONCE(fmt, ...) \ 208#define DRM_DEV_INFO_ONCE(dev, fmt, ...) \
195 printk_once(KERN_INFO "[" DRM_NAME "] " fmt, ##__VA_ARGS__) 209({ \
210 static bool __print_once __read_mostly; \
211 if (!__print_once) { \
212 __print_once = true; \
213 DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \
214 } \
215})
216#define DRM_INFO_ONCE(fmt, ...) DRM_DEV_INFO_ONCE(NULL, fmt, ##__VA_ARGS__)
196 217
197/** 218/**
198 * Debug output. 219 * Debug output.
@@ -200,52 +221,51 @@ void drm_err(const char *format, ...);
200 * \param fmt printf() like format string. 221 * \param fmt printf() like format string.
201 * \param arg arguments 222 * \param arg arguments
202 */ 223 */
224#define DRM_DEV_DEBUG(dev, fmt, args...) \
225 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_CORE, __func__, "", fmt, \
226 ##args)
203#define DRM_DEBUG(fmt, args...) \ 227#define DRM_DEBUG(fmt, args...) \
204 do { \ 228 drm_printk(KERN_DEBUG, DRM_UT_CORE, __func__, "", fmt, ##args)
205 if (unlikely(drm_debug & DRM_UT_CORE)) \
206 drm_ut_debug_printk(__func__, fmt, ##args); \
207 } while (0)
208 229
230#define DRM_DEV_DEBUG_DRIVER(dev, fmt, args...) \
231 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_DRIVER, __func__, "", \
232 fmt, ##args)
209#define DRM_DEBUG_DRIVER(fmt, args...) \ 233#define DRM_DEBUG_DRIVER(fmt, args...) \
210 do { \ 234 drm_printk(KERN_DEBUG, DRM_UT_DRIVER, __func__, "", fmt, ##args)
211 if (unlikely(drm_debug & DRM_UT_DRIVER)) \ 235
212 drm_ut_debug_printk(__func__, fmt, ##args); \ 236#define DRM_DEV_DEBUG_KMS(dev, fmt, args...) \
213 } while (0) 237 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_KMS, __func__, "", fmt, \
238 ##args)
214#define DRM_DEBUG_KMS(fmt, args...) \ 239#define DRM_DEBUG_KMS(fmt, args...) \
215 do { \ 240 drm_printk(KERN_DEBUG, DRM_UT_KMS, __func__, "", fmt, ##args)
216 if (unlikely(drm_debug & DRM_UT_KMS)) \ 241
217 drm_ut_debug_printk(__func__, fmt, ##args); \ 242#define DRM_DEV_DEBUG_PRIME(dev, fmt, args...) \
218 } while (0) 243 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_PRIME, __func__, "", \
244 fmt, ##args)
219#define DRM_DEBUG_PRIME(fmt, args...) \ 245#define DRM_DEBUG_PRIME(fmt, args...) \
220 do { \ 246 drm_printk(KERN_DEBUG, DRM_UT_PRIME, __func__, "", fmt, ##args)
221 if (unlikely(drm_debug & DRM_UT_PRIME)) \ 247
222 drm_ut_debug_printk(__func__, fmt, ##args); \ 248#define DRM_DEV_DEBUG_ATOMIC(dev, fmt, args...) \
223 } while (0) 249 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ATOMIC, __func__, "", \
250 fmt, ##args)
224#define DRM_DEBUG_ATOMIC(fmt, args...) \ 251#define DRM_DEBUG_ATOMIC(fmt, args...) \
225 do { \ 252 drm_printk(KERN_DEBUG, DRM_UT_ATOMIC, __func__, "", fmt, ##args)
226 if (unlikely(drm_debug & DRM_UT_ATOMIC)) \ 253
227 drm_ut_debug_printk(__func__, fmt, ##args); \ 254#define DRM_DEV_DEBUG_VBL(dev, fmt, args...) \
228 } while (0) 255 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_VBL, __func__, "", fmt, \
256 ##args)
229#define DRM_DEBUG_VBL(fmt, args...) \ 257#define DRM_DEBUG_VBL(fmt, args...) \
230 do { \ 258 drm_printk(KERN_DEBUG, DRM_UT_VBL, __func__, "", fmt, ##args)
231 if (unlikely(drm_debug & DRM_UT_VBL)) \ 259
232 drm_ut_debug_printk(__func__, fmt, ##args); \ 260#define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, level, fmt, args...) \
233 } while (0) 261({ \
234 262 static DEFINE_RATELIMIT_STATE(_rs, \
235#define _DRM_DEFINE_DEBUG_RATELIMITED(level, fmt, args...) \ 263 DEFAULT_RATELIMIT_INTERVAL, \
236 do { \ 264 DEFAULT_RATELIMIT_BURST); \
237 if (unlikely(drm_debug & DRM_UT_ ## level)) { \ 265 if (__ratelimit(&_rs)) \
238 static DEFINE_RATELIMIT_STATE( \ 266 drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ ## level, \
239 _rs, \ 267 __func__, "", fmt, ##args); \
240 DEFAULT_RATELIMIT_INTERVAL, \ 268})
241 DEFAULT_RATELIMIT_BURST); \
242 \
243 if (__ratelimit(&_rs)) { \
244 drm_ut_debug_printk(__func__, fmt, \
245 ##args); \
246 } \
247 } \
248 } while (0)
249 269
250/** 270/**
251 * Rate limited debug output. Like DRM_DEBUG() but won't flood the log. 271 * Rate limited debug output. Like DRM_DEBUG() but won't flood the log.
@@ -253,14 +273,22 @@ void drm_err(const char *format, ...);
253 * \param fmt printf() like format string. 273 * \param fmt printf() like format string.
254 * \param arg arguments 274 * \param arg arguments
255 */ 275 */
276#define DRM_DEV_DEBUG_RATELIMITED(dev, fmt, args...) \
277 DEV__DRM_DEFINE_DEBUG_RATELIMITED(dev, CORE, fmt, ##args)
256#define DRM_DEBUG_RATELIMITED(fmt, args...) \ 278#define DRM_DEBUG_RATELIMITED(fmt, args...) \
257 _DRM_DEFINE_DEBUG_RATELIMITED(CORE, fmt, ##args) 279 DRM_DEV_DEBUG_RATELIMITED(NULL, fmt, ##args)
280#define DRM_DEV_DEBUG_DRIVER_RATELIMITED(dev, fmt, args...) \
281 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRIVER, fmt, ##args)
258#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, args...) \ 282#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, args...) \
259 _DRM_DEFINE_DEBUG_RATELIMITED(DRIVER, fmt, ##args) 283 DRM_DEV_DEBUG_DRIVER_RATELIMITED(NULL, fmt, ##args)
284#define DRM_DEV_DEBUG_KMS_RATELIMITED(dev, fmt, args...) \
285 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, KMS, fmt, ##args)
260#define DRM_DEBUG_KMS_RATELIMITED(fmt, args...) \ 286#define DRM_DEBUG_KMS_RATELIMITED(fmt, args...) \
261 _DRM_DEFINE_DEBUG_RATELIMITED(KMS, fmt, ##args) 287 DRM_DEV_DEBUG_KMS_RATELIMITED(NULL, fmt, ##args)
288#define DRM_DEV_DEBUG_PRIME_RATELIMITED(dev, fmt, args...) \
289 _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, PRIME, fmt, ##args)
262#define DRM_DEBUG_PRIME_RATELIMITED(fmt, args...) \ 290#define DRM_DEBUG_PRIME_RATELIMITED(fmt, args...) \
263 _DRM_DEFINE_DEBUG_RATELIMITED(PRIME, fmt, ##args) 291 DRM_DEV_DEBUG_PRIME_RATELIMITED(NULL, fmt, ##args)
264 292
265/*@}*/ 293/*@}*/
266 294