From: Jani Nikula <jani.nikula@intel.com>
To: Michal Wajdeczko <michal.wajdeczko@intel.com>,
dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Subject: Re: [PATCH 1/3] drm/print: Add generic drm dev printk function
Date: Fri, 17 May 2024 16:33:24 +0300 [thread overview]
Message-ID: <87seyga7h7.fsf@intel.com> (raw)
In-Reply-To: <20240517125730.2304-2-michal.wajdeczko@intel.com>
On Fri, 17 May 2024, Michal Wajdeczko <michal.wajdeczko@intel.com> wrote:
> We already have some drm printk functions that need to duplicate
> a code to get a similar format of the final result, for example:
>
> [ ] 0000:00:00.0: [drm:foo] bar
> [ ] 0000:00:00.0: [drm] foo bar
> [ ] 0000:00:00.0: [drm] *ERROR* foo
>
> Add a generic __drm_dev_vprintk() function that can format the
> final message like all other existing function do and allows us
> to keep the formatting code in one place.
Nice idea!
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_print.c | 49 ++++++++++++++++++++-----------------
> include/drm/drm_print.h | 3 +++
> 2 files changed, 30 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
> index cf2efb44722c..a2b60c8245a1 100644
> --- a/drivers/gpu/drm/drm_print.c
> +++ b/drivers/gpu/drm/drm_print.c
> @@ -187,19 +187,12 @@ 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);
> + __drm_dev_vprintk(dev, KERN_DEBUG, NULL, p->prefix, vaf);
> }
> EXPORT_SYMBOL(__drm_printfn_dbg);
>
> @@ -277,6 +270,29 @@ void drm_print_bits(struct drm_printer *p, unsigned long value,
> }
> EXPORT_SYMBOL(drm_print_bits);
>
> +void __drm_dev_vprintk(const struct device *dev, const char *level,
> + const void *origin, const char *prefix,
> + struct va_format *vaf)
> +{
> + const char *prefix_pad = prefix ? " " : (prefix = "");
Too clever, please just keep it simple:
const char *prefix_pad = prefix ? " " : "";
if (!prefix)
prefix = "";
> +
> + if (dev)
> + if (origin)
> + dev_printk(level, dev, "[" DRM_NAME ":%ps]%s%s %pV",
> + origin, prefix_pad, prefix, vaf);
> + else
> + dev_printk(level, dev, "[" DRM_NAME "]%s%s %pV",
> + prefix_pad, prefix, vaf);
> + else
> + if (origin)
> + printk("%s" "[" DRM_NAME ":%ps]%s%s %pV",
> + level, origin, prefix_pad, prefix, vaf);
> + else
> + printk("%s" "[" DRM_NAME "]%s%s %pV",
> + level, prefix_pad, prefix, vaf);
I'd sprinkle a few curly braces around the top level if-else blocks.
Side note, feels like using DRM_NAME makes things harder, not
easier. But that's for another patch.
> +}
> +EXPORT_SYMBOL(__drm_dev_vprintk);
AFAICT this could be a non-exported static function. And probably moved
earlier in the file to not require a declaration.
BR,
Jani.
> +
> void drm_dev_printk(const struct device *dev, const char *level,
> const char *format, ...)
> {
> @@ -287,12 +303,7 @@ void drm_dev_printk(const struct device *dev, const char *level,
> vaf.fmt = format;
> vaf.va = &args;
>
> - if (dev)
> - dev_printk(level, dev, "[" DRM_NAME ":%ps] %pV",
> - __builtin_return_address(0), &vaf);
> - else
> - printk("%s" "[" DRM_NAME ":%ps] %pV",
> - level, __builtin_return_address(0), &vaf);
> + __drm_dev_vprintk(dev, level, __builtin_return_address(0), NULL, &vaf);
>
> va_end(args);
> }
> @@ -312,12 +323,7 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
> vaf.fmt = format;
> vaf.va = &args;
>
> - if (dev)
> - dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
> - __builtin_return_address(0), &vaf);
> - else
> - printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
> - __builtin_return_address(0), &vaf);
> + __drm_dev_vprintk(dev, KERN_DEBUG, __builtin_return_address(0), NULL, &vaf);
>
> va_end(args);
> }
> @@ -351,8 +357,7 @@ void __drm_err(const char *format, ...)
> vaf.fmt = format;
> vaf.va = &args;
>
> - printk(KERN_ERR "[" DRM_NAME ":%ps] *ERROR* %pV",
> - __builtin_return_address(0), &vaf);
> + __drm_dev_vprintk(NULL, KERN_ERR, __builtin_return_address(0), "*ERROR*", &vaf);
>
> va_end(args);
> }
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index 089950ad8681..bb1801c58544 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -366,6 +366,9 @@ static inline struct drm_printer drm_err_printer(struct drm_device *drm,
> __printf(3, 4)
> void drm_dev_printk(const struct device *dev, const char *level,
> const char *format, ...);
> +void __drm_dev_vprintk(const struct device *dev, const char *level,
> + const void *origin, const char *prefix,
> + struct va_format *vaf);
> struct _ddebug;
> __printf(4, 5)
> void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-05-17 13:33 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-17 12:57 [PATCH 0/3] Improve drm printer code Michal Wajdeczko
2024-05-17 12:57 ` [PATCH 1/3] drm/print: Add generic drm dev printk function Michal Wajdeczko
2024-05-17 13:33 ` Jani Nikula [this message]
2024-05-17 15:42 ` Michal Wajdeczko
2024-05-17 12:57 ` [PATCH 2/3] drm/print: Improve drm_dbg_printer Michal Wajdeczko
2024-05-17 13:35 ` Jani Nikula
2024-05-17 12:57 ` [PATCH 3/3] drm/i915: Don't use __func__ as prefix for drm_dbg_printer Michal Wajdeczko
2024-05-17 13:35 ` Jani Nikula
2024-05-17 14:12 ` ✗ Fi.CI.CHECKPATCH: warning for Improve drm printer code Patchwork
2024-05-17 14:12 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-05-17 14:28 ` ✓ Fi.CI.BAT: success " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87seyga7h7.fsf@intel.com \
--to=jani.nikula@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=michal.wajdeczko@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.