From: Jani Nikula <jani.nikula@linux.intel.com>
To: dri-devel@lists.freedesktop.org
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
open list <linux-kernel@vger.kernel.org>,
David Airlie <airlied@linux.ie>,
Gerd Hoffmann <kraxel@redhat.com>, Sean Paul <sean@poorly.run>
Subject: Re: [PATCH v3 1/7] drm: add drm_print_bits
Date: Wed, 18 Sep 2019 15:24:01 +0300 [thread overview]
Message-ID: <87sgotx066.fsf@intel.com> (raw)
In-Reply-To: <20190904054740.20817-2-kraxel@redhat.com>
On Wed, 04 Sep 2019, Gerd Hoffmann <kraxel@redhat.com> wrote:
> New helper to print named bits of some value (think flags fields).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/drm/drm_print.h | 3 +++
> drivers/gpu/drm/drm_print.c | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index 112165d3195d..12d4916254b4 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -89,6 +89,9 @@ __printf(2, 3)
> void drm_printf(struct drm_printer *p, const char *f, ...);
> void drm_puts(struct drm_printer *p, const char *str);
> void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset);
> +void drm_print_bits(struct drm_printer *p,
> + unsigned long value, const char *bits[],
> + unsigned int from, unsigned int to);
>
> __printf(2, 0)
> /**
> diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
> index ad302d71eeee..dfa27367ebb8 100644
> --- a/drivers/gpu/drm/drm_print.c
> +++ b/drivers/gpu/drm/drm_print.c
> @@ -185,6 +185,39 @@ void drm_printf(struct drm_printer *p, const char *f, ...)
> }
> EXPORT_SYMBOL(drm_printf);
>
> +/**
> + * drm_print_bits - print bits to a &drm_printer stream
> + *
> + * Print bits (in flag fields for example) in human readable form.
> + * The first name in the @bits array is for the bit indexed by @from.
> + *
> + * @p: the &drm_printer
> + * @value: field value.
> + * @bits: Array with bit names.
> + * @from: start of bit range to print (inclusive).
> + * @to: end of bit range to print (exclusive).
> + */
> +void drm_print_bits(struct drm_printer *p,
> + unsigned long value, const char *bits[],
> + unsigned int from, unsigned int to)
> +{
> + bool first = true;
> + unsigned int i;
> +
> + for (i = from; i < to; i++) {
> + if (!(value & (1 << i)))
> + continue;
for_each_set_bit from bitops.h?
> + if (WARN_ON_ONCE(!bits[i-from]))
> + continue;
> + drm_printf(p, "%s%s", first ? "" : ",",
> + bits[i-from]);
I wonder about the usefulness of from and to, as well as indexing
(i-from) for the strings.
To limit the values to be printed in a more general way than range, you
can use:
drm_print_bits(p, value & GENMASK(h, l), bits);
And obviously to adjust the starting position:
drm_print_bits(p, value >> l, bits);
Seems like a simple len parameter to indicate the ARRAY_SIZE() of bits
would be more straighforward to guard against array overflow.
drm_print_bits(p, value, bits, ARRAY_SIZE(bits));
BR,
Jani.
> + first = false;
> + }
> + if (first)
> + drm_printf(p, "(none)");
> +}
> +EXPORT_SYMBOL(drm_print_bits);
> +
> void drm_dev_printk(const struct device *dev, const char *level,
> const char *format, ...)
> {
--
Jani Nikula, Intel Open Source Graphics Center
WARNING: multiple messages have this Message-ID (diff)
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Gerd Hoffmann <kraxel@redhat.com>, dri-devel@lists.freedesktop.org
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
open list <linux-kernel@vger.kernel.org>,
David Airlie <airlied@linux.ie>,
Gerd Hoffmann <kraxel@redhat.com>, Sean Paul <sean@poorly.run>
Subject: Re: [PATCH v3 1/7] drm: add drm_print_bits
Date: Wed, 18 Sep 2019 15:24:01 +0300 [thread overview]
Message-ID: <87sgotx066.fsf@intel.com> (raw)
In-Reply-To: <20190904054740.20817-2-kraxel@redhat.com>
On Wed, 04 Sep 2019, Gerd Hoffmann <kraxel@redhat.com> wrote:
> New helper to print named bits of some value (think flags fields).
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/drm/drm_print.h | 3 +++
> drivers/gpu/drm/drm_print.c | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index 112165d3195d..12d4916254b4 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -89,6 +89,9 @@ __printf(2, 3)
> void drm_printf(struct drm_printer *p, const char *f, ...);
> void drm_puts(struct drm_printer *p, const char *str);
> void drm_print_regset32(struct drm_printer *p, struct debugfs_regset32 *regset);
> +void drm_print_bits(struct drm_printer *p,
> + unsigned long value, const char *bits[],
> + unsigned int from, unsigned int to);
>
> __printf(2, 0)
> /**
> diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
> index ad302d71eeee..dfa27367ebb8 100644
> --- a/drivers/gpu/drm/drm_print.c
> +++ b/drivers/gpu/drm/drm_print.c
> @@ -185,6 +185,39 @@ void drm_printf(struct drm_printer *p, const char *f, ...)
> }
> EXPORT_SYMBOL(drm_printf);
>
> +/**
> + * drm_print_bits - print bits to a &drm_printer stream
> + *
> + * Print bits (in flag fields for example) in human readable form.
> + * The first name in the @bits array is for the bit indexed by @from.
> + *
> + * @p: the &drm_printer
> + * @value: field value.
> + * @bits: Array with bit names.
> + * @from: start of bit range to print (inclusive).
> + * @to: end of bit range to print (exclusive).
> + */
> +void drm_print_bits(struct drm_printer *p,
> + unsigned long value, const char *bits[],
> + unsigned int from, unsigned int to)
> +{
> + bool first = true;
> + unsigned int i;
> +
> + for (i = from; i < to; i++) {
> + if (!(value & (1 << i)))
> + continue;
for_each_set_bit from bitops.h?
> + if (WARN_ON_ONCE(!bits[i-from]))
> + continue;
> + drm_printf(p, "%s%s", first ? "" : ",",
> + bits[i-from]);
I wonder about the usefulness of from and to, as well as indexing
(i-from) for the strings.
To limit the values to be printed in a more general way than range, you
can use:
drm_print_bits(p, value & GENMASK(h, l), bits);
And obviously to adjust the starting position:
drm_print_bits(p, value >> l, bits);
Seems like a simple len parameter to indicate the ARRAY_SIZE() of bits
would be more straighforward to guard against array overflow.
drm_print_bits(p, value, bits, ARRAY_SIZE(bits));
BR,
Jani.
> + first = false;
> + }
> + if (first)
> + drm_printf(p, "(none)");
> +}
> +EXPORT_SYMBOL(drm_print_bits);
> +
> void drm_dev_printk(const struct device *dev, const char *level,
> const char *format, ...)
> {
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2019-09-18 12:24 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-04 5:47 [PATCH v3 0/7] drm: add some ttm/vram info to debugfs Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 1/7] drm: add drm_print_bits Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-09 12:46 ` Thomas Zimmermann
2019-09-17 12:33 ` Daniel Vetter
2019-09-18 12:24 ` Jani Nikula [this message]
2019-09-18 12:24 ` Jani Nikula
2019-09-04 5:47 ` [PATCH v3 2/7] drm/ttm: add drm gem ttm helpers, starting with drm_gem_ttm_print_info() Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 3/7] drm/vram: use drm_gem_ttm_print_info Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 4/7] drm/vram: add vram-mm debugfs file Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 5/7] drm/qxl: use drm_gem_object_funcs callbacks Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 6/7] drm/qxl: use drm_gem_ttm_print_info Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` [PATCH v3 7/7] drm/vram: fix Kconfig Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-04 5:47 ` Gerd Hoffmann
2019-09-09 12:47 ` Thomas Zimmermann
2019-09-09 12:47 ` Thomas Zimmermann
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=87sgotx066.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=airlied@linux.ie \
--cc=dri-devel@lists.freedesktop.org \
--cc=kraxel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.ripard@bootlin.com \
--cc=sean@poorly.run \
/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.