[Intel-gfx] [PATCH] drm/i915: Build request info on stack before printk
Chris Wilson
chris at chris-wilson.co.uk
Tue Apr 24 01:25:26 UTC 2018
Quoting Chris Wilson (2018-04-24 02:08:39)
> printk unhelpfully inserts a '\n' between consecutive calls, and since
> our drm_printf wrapper may be emitting info a seq_file instead,
> KERN_CONT is not an option. To work with any drm_printf destination, we
> need to build up the output into a temporary buf on the stack and then
> feed the complete line in a single call to printk.
>
> Fixes: b7268c5eed0a ("drm/i915: Pack params to engine->schedule() into a struct")
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> ---
I put back the i915 parameter as it makes later patches easier. The
conflict in rebasing was a reminder why it was there in the first place.
-Chris
> drivers/gpu/drm/i915/intel_engine_cs.c | 24 +++++++++++++++---------
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index be608f7111f5..66cddd059666 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1113,14 +1113,17 @@ unsigned int intel_engines_has_context_isolation(struct drm_i915_private *i915)
> return which;
> }
>
> -static void print_sched_attr(struct drm_printer *m,
> - const struct drm_i915_private *i915,
> - const struct i915_sched_attr *attr)
> +static int print_sched_attr(struct drm_i915_private *i915,
> + const struct i915_sched_attr *attr,
> + char *buf, int x, int len)
> {
> if (attr->priority == I915_PRIORITY_INVALID)
> - return;
> + return x;
> +
> + x += snprintf(buf + x, len - x,
> + " prio=%d", attr->priority);
>
> - drm_printf(m, "prio=%d", attr->priority);
> + return x;
> }
>
> static void print_request(struct drm_printer *m,
> @@ -1128,14 +1131,17 @@ static void print_request(struct drm_printer *m,
> const char *prefix)
> {
> const char *name = rq->fence.ops->get_timeline_name(&rq->fence);
> + char buf[80];
> + int x = 0;
> +
> + x = print_sched_attr(rq->i915, &rq->sched.attr, buf, x, sizeof(buf));
>
> - drm_printf(m, "%s%x%s [%llx:%x] ",
> + drm_printf(m, "%s%x%s [%llx:%x]%s @ %dms: %s\n",
> prefix,
> rq->global_seqno,
> i915_request_completed(rq) ? "!" : "",
> - rq->fence.context, rq->fence.seqno);
> - print_sched_attr(m, rq->i915, &rq->sched.attr);
> - drm_printf(m, " @ %dms: %s\n",
> + rq->fence.context, rq->fence.seqno,
> + buf,
> jiffies_to_msecs(jiffies - rq->emitted_jiffies),
> name);
> }
> --
> 2.17.0
>
More information about the Intel-gfx
mailing list