aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryakui_zhao <yakui.zhao@intel.com>2009-06-02 02:09:47 -0400
committerDave Airlie <airlied@redhat.com>2009-06-11 04:36:36 -0400
commit4fefcb27050b98c97b1c32bc710fc2f874449dee (patch)
tree1983f5ca546dab13d56ad8207762fee6088c9079
parentdf4f7fe7bd516b3833e25c692c3970e22038a6ca (diff)
drm: add separate drm debugging levels
Now all the DRM debug info will be reported if the boot option of "drm.debug=1" is added. Sometimes it is inconvenient to get the debug info in KMS mode. We will get too much unrelated info. This will separate several DRM debug levels and the debug level can be used to print the different debug info. And the debug level is controlled by the module parameter of drm.debug In this patch it is divided into four debug levels; drm_core, drm_driver, drm_kms, drm_mode. At the same time we can get the different debug info by changing the debug level. This can be done by adding the module parameter. Of course it can be changed through the /sys/module/drm/parameters/debug after the system is booted. Four debug macro definitions are provided. DRM_DEBUG(fmt, args...) DRM_DEBUG_DRIVER(prefix, fmt, args...) DRM_DEBUG_KMS(prefix, fmt, args...) DRM_DEBUG_MODE(prefix, fmt, args...) When the boot option of "drm.debug=4" is added, it will print the debug info using DRM_DEBUG_KMS macro definition. When the boot option of "drm.debug=6" is added, it will print the debug info using DRM_DEBUG_KMS/DRM_DEBUG_DRIVER. Sometimes we expect to print the value of an array. For example: SDVO command, In such case the following four DRM debug macro definitions are added: DRM_LOG(fmt, args...) DRM_LOG_DRIVER(fmt, args...) DRM_LOG_KMS(fmt, args...) DRM_LOG_MODE(fmt, args...) Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/drm_stub.c17
-rw-r--r--include/drm/drmP.h61
2 files changed, 72 insertions, 6 deletions
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index b9631e3a1ea6..89050684fe0d 100644
--- a/drivers/gpu/drm/drm_stub.c
+++ b/drivers/gpu/drm/drm_stub.c
@@ -51,7 +51,22 @@ struct idr drm_minors_idr;
51struct class *drm_class; 51struct class *drm_class;
52struct proc_dir_entry *drm_proc_root; 52struct proc_dir_entry *drm_proc_root;
53struct dentry *drm_debugfs_root; 53struct dentry *drm_debugfs_root;
54 54void drm_ut_debug_printk(unsigned int request_level,
55 const char *prefix,
56 const char *function_name,
57 const char *format, ...)
58{
59 va_list args;
60
61 if (drm_debug & request_level) {
62 if (function_name)
63 printk(KERN_DEBUG "[%s:%s], ", prefix, function_name);
64 va_start(args, format);
65 vprintk(format, args);
66 va_end(args);
67 }
68}
69EXPORT_SYMBOL(drm_ut_debug_printk);
55static int drm_minor_get_id(struct drm_device *dev, int type) 70static int drm_minor_get_id(struct drm_device *dev, int type)
56{ 71{
57 int new_id; 72 int new_id;
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index efa5f79a35c7..afc21685230e 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -87,6 +87,15 @@ struct drm_device;
87#include "drm_os_linux.h" 87#include "drm_os_linux.h"
88#include "drm_hashtab.h" 88#include "drm_hashtab.h"
89 89
90#define DRM_UT_CORE 0x01
91#define DRM_UT_DRIVER 0x02
92#define DRM_UT_KMS 0x04
93#define DRM_UT_MODE 0x08
94
95extern void drm_ut_debug_printk(unsigned int request_level,
96 const char *prefix,
97 const char *function_name,
98 const char *format, ...);
90/***********************************************************************/ 99/***********************************************************************/
91/** \name DRM template customization defaults */ 100/** \name DRM template customization defaults */
92/*@{*/ 101/*@{*/
@@ -186,15 +195,57 @@ struct drm_device;
186 * \param arg arguments 195 * \param arg arguments
187 */ 196 */
188#if DRM_DEBUG_CODE 197#if DRM_DEBUG_CODE
189#define DRM_DEBUG(fmt, arg...) \ 198#define DRM_DEBUG(fmt, args...) \
190 do { \ 199 do { \
191 if ( drm_debug ) \ 200 drm_ut_debug_printk(DRM_UT_CORE, DRM_NAME, \
192 printk(KERN_DEBUG \ 201 __func__, fmt, ##args); \
193 "[" DRM_NAME ":%s] " fmt , \ 202 } while (0)
194 __func__ , ##arg); \ 203
204#define DRM_DEBUG_DRIVER(prefix, fmt, args...) \
205 do { \
206 drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \
207 __func__, fmt, ##args); \
208 } while (0)
209#define DRM_DEBUG_KMS(prefix, fmt, args...) \
210 do { \
211 drm_ut_debug_printk(DRM_UT_KMS, prefix, \
212 __func__, fmt, ##args); \
213 } while (0)
214#define DRM_DEBUG_MODE(prefix, fmt, args...) \
215 do { \
216 drm_ut_debug_printk(DRM_UT_MODE, prefix, \
217 __func__, fmt, ##args); \
218 } while (0)
219#define DRM_LOG(fmt, args...) \
220 do { \
221 drm_ut_debug_printk(DRM_UT_CORE, NULL, \
222 NULL, fmt, ##args); \
223 } while (0)
224#define DRM_LOG_KMS(fmt, args...) \
225 do { \
226 drm_ut_debug_printk(DRM_UT_KMS, NULL, \
227 NULL, fmt, ##args); \
228 } while (0)
229#define DRM_LOG_MODE(fmt, args...) \
230 do { \
231 drm_ut_debug_printk(DRM_UT_MODE, NULL, \
232 NULL, fmt, ##args); \
233 } while (0)
234#define DRM_LOG_DRIVER(fmt, args...) \
235 do { \
236 drm_ut_debug_printk(DRM_UT_DRIVER, NULL, \
237 NULL, fmt, ##args); \
195 } while (0) 238 } while (0)
196#else 239#else
240#define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0)
241#define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0)
242#define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0)
197#define DRM_DEBUG(fmt, arg...) do { } while (0) 243#define DRM_DEBUG(fmt, arg...) do { } while (0)
244#define DRM_LOG(fmt, arg...) do { } while (0)
245#define DRM_LOG_KMS(fmt, args...) do { } while (0)
246#define DRM_LOG_MODE(fmt, arg...) do { } while (0)
247#define DRM_LOG_DRIVER(fmt, arg...) do { } while (0)
248
198#endif 249#endif
199 250
200#define DRM_PROC_LIMIT (PAGE_SIZE-80) 251#define DRM_PROC_LIMIT (PAGE_SIZE-80)