From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/3] drm/i915: Clean up GPU hang message
Date: Tue, 05 Jul 2016 13:01:07 +0300 [thread overview]
Message-ID: <87k2h0v1y4.fsf@intel.com> (raw)
In-Reply-To: <1467618513-4966-2-git-send-email-chris@chris-wilson.co.uk>
Chris Wilson <chris@chris-wilson.co.uk> writes:
> Remove some redundant kernel messages as we deduce a hung GPU and
> capture the error state.
>
> v2: Fix "hang" vs "no progress" message whilst I was there
> v3: s/snprintf/scnprintf/
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> ---
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
> drivers/gpu/drm/i915/i915_irq.c | 41 ++++++++++++++++++++++++++---------------
> 1 file changed, 26 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index f0535df41dfd..0e0710acf7f1 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -3084,9 +3084,8 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
> container_of(work, typeof(*dev_priv),
> gpu_error.hangcheck_work.work);
> struct intel_engine_cs *engine;
> - enum intel_engine_id id;
> - int busy_count = 0, rings_hung = 0;
> - bool stuck[I915_NUM_ENGINES] = { 0 };
> + unsigned int hung = 0, stuck = 0;
> + int busy_count = 0;
> #define BUSY 1
> #define KICK 5
> #define HUNG 20
> @@ -3104,7 +3103,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
> */
> intel_uncore_arm_unclaimed_mmio_detection(dev_priv);
>
> - for_each_engine_id(engine, dev_priv, id) {
> + for_each_engine(engine, dev_priv) {
> bool busy = intel_engine_has_waiter(engine);
> u64 acthd;
> u32 seqno;
> @@ -3167,10 +3166,15 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
> break;
> case HANGCHECK_HUNG:
> engine->hangcheck.score += HUNG;
> - stuck[id] = true;
> break;
> }
> }
> +
> + if (engine->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG) {
> + hung |= intel_engine_flag(engine);
> + if (engine->hangcheck.action != HANGCHECK_HUNG)
> + stuck |= intel_engine_flag(engine);
> + }
> } else {
> engine->hangcheck.action = HANGCHECK_ACTIVE;
>
> @@ -3195,17 +3199,24 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
> busy_count += busy;
> }
>
> - for_each_engine_id(engine, dev_priv, id) {
> - if (engine->hangcheck.score >= HANGCHECK_SCORE_RING_HUNG) {
> - DRM_INFO("%s on %s\n",
> - stuck[id] ? "stuck" : "no progress",
> - engine->name);
> - rings_hung |= intel_engine_flag(engine);
> - }
> - }
> + if (hung) {
> + char msg[80];
> + int len;
>
> - if (rings_hung)
> - i915_handle_error(dev_priv, rings_hung, "Engine(s) hung");
> + /* If some rings hung but others were still busy, only
> + * blame the hanging rings in the synopsis.
> + */
> + if (stuck != hung)
> + hung &= ~stuck;
> + len = scnprintf(msg, sizeof(msg),
> + "%s on ", stuck == hung ? "No progress" : "Hang");
> + for_each_engine_masked(engine, dev_priv, hung)
> + len += scnprintf(msg + len, sizeof(msg) - len,
> + "%s, ", engine->name);
> + msg[len-2] = '\0';
> +
> + return i915_handle_error(dev_priv, hung, msg);
> + }
>
> /* Reset timer in case GPU hangs without another request being added */
> if (busy_count)
> --
> 2.8.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-07-05 10:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-04 7:48 [PATCH 1/3] drm/i915: Amalgamate gen6_mm_switch() and vgpu_mm_switch() Chris Wilson
2016-07-04 7:48 ` [PATCH 2/3] drm/i915: Clean up GPU hang message Chris Wilson
2016-07-05 10:01 ` Mika Kuoppala [this message]
2016-07-04 7:48 ` [PATCH 3/3] drm/i915: Skip capturing an error state if we already have one Chris Wilson
2016-07-05 10:10 ` Mika Kuoppala
2016-07-05 10:28 ` Chris Wilson
2016-07-04 9:01 ` ✗ Ro.CI.BAT: failure for series starting with [1/3] drm/i915: Amalgamate gen6_mm_switch() and vgpu_mm_switch() Patchwork
2016-07-05 9:59 ` [PATCH 1/3] " Mika Kuoppala
2016-07-05 10:04 ` Chris Wilson
2016-07-05 10:07 ` Mika Kuoppala
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=87k2h0v1y4.fsf@intel.com \
--to=mika.kuoppala@linux.intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
/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.