drm/print: add drm_dbg_printer() for drm device specific printer
We've lacked a device specific debug printer. Add one. Take category into account too. __builtin_return_address(0) is inaccurate here, so don't use it. If necessary, we can later pass __func__ to drm_dbg_printer() by wrapping it inside a macro. Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Luca Coelho <luciano.coelho@intel.com> Acked-by: Maxime Ripard <mripard@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/48607d58e5cdf8341ffdd522257542fa2ce41a19.1705410327.git.jani.nikula@intel.com
This commit is contained in:
parent
82195d48b7
commit
9fd6f61a29
@ -189,6 +189,27 @@ void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf)
|
||||
}
|
||||
EXPORT_SYMBOL(__drm_printfn_debug);
|
||||
|
||||
void __drm_printfn_dbg(struct drm_printer *p, struct va_format *vaf)
|
||||
{
|
||||
const struct drm_device *drm = p->arg;
|
||||
const struct device *dev = drm ? drm->dev : NULL;
|
||||
enum drm_debug_category category = p->category;
|
||||
const char *prefix = p->prefix ?: "";
|
||||
const char *prefix_pad = p->prefix ? " " : "";
|
||||
|
||||
if (!__drm_debug_enabled(category))
|
||||
return;
|
||||
|
||||
/* Note: __builtin_return_address(0) is useless here. */
|
||||
if (dev)
|
||||
dev_printk(KERN_DEBUG, dev, "[" DRM_NAME "]%s%s %pV",
|
||||
prefix_pad, prefix, vaf);
|
||||
else
|
||||
printk(KERN_DEBUG "[" DRM_NAME "]%s%s %pV",
|
||||
prefix_pad, prefix, vaf);
|
||||
}
|
||||
EXPORT_SYMBOL(__drm_printfn_dbg);
|
||||
|
||||
void __drm_printfn_err(struct drm_printer *p, struct va_format *vaf)
|
||||
{
|
||||
struct drm_device *drm = p->arg;
|
||||
|
@ -176,6 +176,7 @@ struct drm_printer {
|
||||
void (*puts)(struct drm_printer *p, const char *str);
|
||||
void *arg;
|
||||
const char *prefix;
|
||||
enum drm_debug_category category;
|
||||
};
|
||||
|
||||
void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf);
|
||||
@ -184,6 +185,7 @@ void __drm_printfn_seq_file(struct drm_printer *p, struct va_format *vaf);
|
||||
void __drm_puts_seq_file(struct drm_printer *p, const char *str);
|
||||
void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf);
|
||||
void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf);
|
||||
void __drm_printfn_dbg(struct drm_printer *p, struct va_format *vaf);
|
||||
void __drm_printfn_err(struct drm_printer *p, struct va_format *vaf);
|
||||
|
||||
__printf(2, 3)
|
||||
@ -331,6 +333,28 @@ static inline struct drm_printer drm_debug_printer(const char *prefix)
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_dbg_printer - construct a &drm_printer for drm device specific output
|
||||
* @drm: the &struct drm_device pointer, or NULL
|
||||
* @category: the debug category to use
|
||||
* @prefix: debug output prefix, or NULL for no prefix
|
||||
*
|
||||
* RETURNS:
|
||||
* The &drm_printer object
|
||||
*/
|
||||
static inline struct drm_printer drm_dbg_printer(struct drm_device *drm,
|
||||
enum drm_debug_category category,
|
||||
const char *prefix)
|
||||
{
|
||||
struct drm_printer p = {
|
||||
.printfn = __drm_printfn_dbg,
|
||||
.arg = drm,
|
||||
.prefix = prefix,
|
||||
.category = category,
|
||||
};
|
||||
return p;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_err_printer - construct a &drm_printer that outputs to drm_err()
|
||||
* @drm: the &struct drm_device pointer
|
||||
|
Loading…
Reference in New Issue
Block a user