diff options
-rw-r--r-- | drivers/gpu/drm/drm_drv.c | 27 | ||||
-rw-r--r-- | include/drm/drmP.h | 140 |
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 | ||
64 | static struct dentry *drm_debugfs_root; | 64 | static struct dentry *drm_debugfs_root; |
65 | 65 | ||
66 | void drm_err(const char *format, ...) | 66 | #define DRM_PRINTK_FMT "[" DRM_NAME ":%s]%s %pV" |
67 | |||
68 | void 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 | } |
81 | EXPORT_SYMBOL(drm_err); | 87 | EXPORT_SYMBOL(drm_dev_printk); |
82 | 88 | ||
83 | void drm_ut_debug_printk(const char *function_name, const char *format, ...) | 89 | void 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 | } |
96 | EXPORT_SYMBOL(drm_ut_debug_printk); | 107 | EXPORT_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 | ||
137 | extern __printf(2, 3) | 138 | extern __printf(6, 7) |
138 | void drm_ut_debug_printk(const char *function_name, | 139 | void drm_dev_printk(const struct device *dev, const char *level, |
139 | const char *format, ...); | 140 | unsigned int category, const char *function_name, |
140 | extern __printf(1, 2) | 141 | const char *prefix, const char *format, ...); |
141 | void drm_err(const char *format, ...); | 142 | |
143 | extern __printf(5, 6) | ||
144 | void 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 | ||