diff options
Diffstat (limited to 'drivers/gpu/drm/drm_print.c')
-rw-r--r-- | drivers/gpu/drm/drm_print.c | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c index 74c466aca622..781518fd88e3 100644 --- a/drivers/gpu/drm/drm_print.c +++ b/drivers/gpu/drm/drm_print.c | |||
@@ -23,6 +23,8 @@ | |||
23 | * Rob Clark <robdclark@gmail.com> | 23 | * Rob Clark <robdclark@gmail.com> |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #define DEBUG /* for pr_debug() */ | ||
27 | |||
26 | #include <stdarg.h> | 28 | #include <stdarg.h> |
27 | #include <linux/seq_file.h> | 29 | #include <linux/seq_file.h> |
28 | #include <drm/drmP.h> | 30 | #include <drm/drmP.h> |
@@ -53,13 +55,57 @@ EXPORT_SYMBOL(__drm_printfn_debug); | |||
53 | */ | 55 | */ |
54 | void drm_printf(struct drm_printer *p, const char *f, ...) | 56 | void drm_printf(struct drm_printer *p, const char *f, ...) |
55 | { | 57 | { |
56 | struct va_format vaf; | ||
57 | va_list args; | 58 | va_list args; |
58 | 59 | ||
59 | va_start(args, f); | 60 | va_start(args, f); |
60 | vaf.fmt = f; | 61 | drm_vprintf(p, f, &args); |
61 | vaf.va = &args; | ||
62 | p->printfn(p, &vaf); | ||
63 | va_end(args); | 62 | va_end(args); |
64 | } | 63 | } |
65 | EXPORT_SYMBOL(drm_printf); | 64 | EXPORT_SYMBOL(drm_printf); |
65 | |||
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, ...) | ||
71 | { | ||
72 | struct va_format vaf; | ||
73 | va_list args; | ||
74 | |||
75 | if (category != DRM_UT_NONE && !(drm_debug & category)) | ||
76 | return; | ||
77 | |||
78 | va_start(args, format); | ||
79 | vaf.fmt = format; | ||
80 | vaf.va = &args; | ||
81 | |||
82 | if (dev) | ||
83 | dev_printk(level, dev, DRM_PRINTK_FMT, function_name, prefix, | ||
84 | &vaf); | ||
85 | else | ||
86 | printk("%s" DRM_PRINTK_FMT, level, function_name, prefix, &vaf); | ||
87 | |||
88 | va_end(args); | ||
89 | } | ||
90 | EXPORT_SYMBOL(drm_dev_printk); | ||
91 | |||
92 | void drm_printk(const char *level, unsigned int category, | ||
93 | const char *format, ...) | ||
94 | { | ||
95 | struct va_format vaf; | ||
96 | va_list args; | ||
97 | |||
98 | if (category != DRM_UT_NONE && !(drm_debug & category)) | ||
99 | return; | ||
100 | |||
101 | va_start(args, format); | ||
102 | vaf.fmt = format; | ||
103 | vaf.va = &args; | ||
104 | |||
105 | printk("%s" "[" DRM_NAME ":%ps]%s %pV", | ||
106 | level, __builtin_return_address(0), | ||
107 | strcmp(level, KERN_ERR) == 0 ? " *ERROR*" : "", &vaf); | ||
108 | |||
109 | va_end(args); | ||
110 | } | ||
111 | EXPORT_SYMBOL(drm_printk); | ||