Module Name: src
Committed By: riastradh
Date: Sun Dec 19 11:46:00 UTC 2021
Modified Files:
src/sys/external/bsd/drm2/dist/drm: drm_print.c
Log Message:
drm: Fix varargs and symbol printing, from mrg@.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/dist/drm/drm_print.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/drm_print.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_print.c:1.8 src/sys/external/bsd/drm2/dist/drm/drm_print.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/drm_print.c:1.8 Sun Dec 19 09:50:19 2021
+++ src/sys/external/bsd/drm2/dist/drm/drm_print.c Sun Dec 19 11:46:00 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_print.c,v 1.8 2021/12/19 09:50:19 riastradh Exp $ */
+/* $NetBSD: drm_print.c,v 1.9 2021/12/19 11:46:00 riastradh Exp $ */
/*
* Copyright (C) 2016 Red Hat
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_print.c,v 1.8 2021/12/19 09:50:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_print.c,v 1.9 2021/12/19 11:46:00 riastradh Exp $");
#ifndef __NetBSD__ /* XXX ??? */
#define DEBUG /* for pr_debug() */
@@ -36,6 +36,7 @@ __KERNEL_RCSID(0, "$NetBSD: drm_print.c,
#include <sys/param.h>
#include <sys/stdarg.h>
#include <sys/device.h>
+#include <sys/ksyms.h>
#else
#include <stdarg.h>
@@ -69,6 +70,30 @@ MODULE_PARM_DESC(debug, "Enable debug ou
module_param_named(debug, __drm_debug, int, 0600);
#endif
+#ifdef __NetBSD__
+static void
+drm_symstr(vaddr_t val, char *out, size_t outsize)
+{
+ unsigned long naddr;
+ const char *mod;
+ const char *sym;
+
+ if (ksyms_getname(&mod, &sym, val, KSYMS_PROC|KSYMS_CLOSEST) == 0) {
+ char offset[32];
+
+ if (ksyms_getval(mod, sym, &naddr, KSYMS_ANY) == 0 &&
+ (val - naddr) != 0)
+ snprintf(offset, sizeof offset, "+%p",
+ (void *)(val - naddr));
+ else
+ offset[0] = '\0';
+ snprintf(out, outsize, "%s:%s%s", mod, sym, offset);
+ return;
+ }
+ snprintf(out, outsize, "%p", (void *)val);
+}
+#endif
+
void __drm_puts_coredump(struct drm_printer *p, const char *str)
{
struct drm_print_iterator *iterator = p->arg;
@@ -175,19 +200,34 @@ EXPORT_SYMBOL(__drm_printfn_seq_file);
void __drm_printfn_info(struct drm_printer *p, struct va_format *vaf)
{
+#ifdef __NetBSD__
+ dev_info(p->arg, "[" DRM_NAME "] ");
+ vprintf(vaf->fmt, *vaf->va); /* XXX */
+#else
dev_info(p->arg, "[" DRM_NAME "] %pV", vaf);
+#endif
}
EXPORT_SYMBOL(__drm_printfn_info);
void __drm_printfn_debug(struct drm_printer *p, struct va_format *vaf)
{
+#ifdef __NetBSD__
+ pr_debug("%s ", p->prefix);
+ vprintf(vaf->fmt, *vaf->va); /* XXX */
+#else
pr_debug("%s %pV", p->prefix, vaf);
+#endif
}
EXPORT_SYMBOL(__drm_printfn_debug);
void __drm_printfn_err(struct drm_printer *p, struct va_format *vaf)
{
+#ifdef __NetBSD__
+ pr_err("*ERROR* %s ", p->prefix);
+ vprintf(vaf->fmt, *vaf->va); /* XXX */
+#else
pr_err("*ERROR* %s %pV", p->prefix, vaf);
+#endif
}
EXPORT_SYMBOL(__drm_printfn_err);
@@ -259,10 +299,15 @@ void drm_dev_printk(const struct device
{
#ifdef __NetBSD__
va_list va;
+ char symbuf[128];
- va_start(va, format);
+ drm_symstr((vaddr_t)__builtin_return_address(0), symbuf, sizeof symbuf);
if (dev)
- printf("%s: ", device_xname(__UNCONST(dev)));
+ printf("%s [" DRM_NAME ":%s] ", device_xname(__UNCONST(dev)), symbuf);
+ else
+ printf("[" DRM_NAME ":%s] ", symbuf);
+
+ va_start(va, format);
vprintf(format, va);
va_end(va);
#else
@@ -290,13 +335,18 @@ void drm_dev_dbg(const struct device *de
{
#ifdef __NetBSD__
va_list va;
+ char symbuf[128];
if (!(__drm_debug & category))
return;
- va_start(va, format);
+ drm_symstr((vaddr_t)__builtin_return_address(0), symbuf, sizeof symbuf);
if (dev)
- printf("%s: ", device_xname(__UNCONST(dev)));
+ printf("%s [" DRM_NAME ":%s] ", device_xname(__UNCONST(dev)), symbuf);
+ else
+ printf("[" DRM_NAME ":%s] ", symbuf);
+
+ va_start(va, format);
vprintf(format, va);
va_end(va);
#else
@@ -325,11 +375,15 @@ EXPORT_SYMBOL(drm_dev_dbg);
void __drm_dbg(enum drm_debug_category category, const char *format, ...)
{
#ifdef __NetBSD__
+ char symbuf[128];
va_list va;
if (!(__drm_debug & category))
return;
+ drm_symstr((vaddr_t)__builtin_return_address(0), symbuf, sizeof symbuf);
+ printf("[" DRM_NAME ":%s] ", symbuf);
+
va_start(va, format);
vprintf(format, va);
va_end(va);
@@ -354,6 +408,17 @@ EXPORT_SYMBOL(__drm_dbg);
void __drm_err(const char *format, ...)
{
+#ifdef __NetBSD__
+ char symbuf[128];
+ va_list va;
+
+ drm_symstr((vaddr_t)__builtin_return_address(0), symbuf, sizeof symbuf);
+ printf("[" DRM_NAME ":%s] *ERROR* ", symbuf);
+
+ va_start(va, format);
+ vprintf(format, va);
+ va_end(va);
+#else
struct va_format vaf;
va_list args;
@@ -365,6 +430,7 @@ void __drm_err(const char *format, ...)
__builtin_return_address(0), &vaf);
va_end(args);
+#endif
}
EXPORT_SYMBOL(__drm_err);