From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2 1/6] drm/i915: Lock out execlist tasklet while peeking inside for busy-stats
Date: Wed, 17 Jan 2018 15:22:09 +0200 [thread overview]
Message-ID: <87k1wgipry.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <20180115102805.22471-1-chris@chris-wilson.co.uk>
Chris Wilson <chris@chris-wilson.co.uk> writes:
> In order to prevent a race condition where we may end up overaccounting
> the active state and leaving the busy-stats believing the GPU is 100%
> busy, lock out the tasklet while we reconstruct the busy state. There is
> no direct spinlock guard for the execlists->port[], so we need to
> utilise tasklet_disable() as a synchronous barrier to prevent the only
> writer to execlists->port[] from running at the same time as the enable.
>
> Fixes: 4900727d35bb ("drm/i915/pmu: Reconstruct active state on starting busy-stats")
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
This series applied on drm-tip with j1900. Uptime 2h 35min until system
hang. Load was glxgears + video.
-Mika
> ---
> drivers/gpu/drm/i915/intel_engine_cs.c | 20 ++++++++++++--------
> 1 file changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index d790bdc227ff..b221610f2365 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1943,16 +1943,22 @@ intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance)
> */
> int intel_enable_engine_stats(struct intel_engine_cs *engine)
> {
> + struct intel_engine_execlists *execlists = &engine->execlists;
> unsigned long flags;
> + int err = 0;
>
> if (!intel_engine_supports_stats(engine))
> return -ENODEV;
>
> + tasklet_disable(&execlists->tasklet);
> spin_lock_irqsave(&engine->stats.lock, flags);
> - if (engine->stats.enabled == ~0)
> - goto busy;
> +
> + if (unlikely(engine->stats.enabled == ~0)) {
> + err = -EBUSY;
> + goto unlock;
> + }
> +
> if (engine->stats.enabled++ == 0) {
> - struct intel_engine_execlists *execlists = &engine->execlists;
> const struct execlist_port *port = execlists->port;
> unsigned int num_ports = execlists_num_ports(execlists);
>
> @@ -1967,14 +1973,12 @@ int intel_enable_engine_stats(struct intel_engine_cs *engine)
> if (engine->stats.active)
> engine->stats.start = engine->stats.enabled_at;
> }
> - spin_unlock_irqrestore(&engine->stats.lock, flags);
>
> - return 0;
> -
> -busy:
> +unlock:
> spin_unlock_irqrestore(&engine->stats.lock, flags);
> + tasklet_enable(&execlists->tasklet);
>
> - return -EBUSY;
> + return err;
> }
>
> static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine)
> --
> 2.15.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2018-01-17 13:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-15 10:28 [PATCH v2 1/6] drm/i915: Lock out execlist tasklet while peeking inside for busy-stats Chris Wilson
2018-01-15 10:28 ` [PATCH v2 2/6] drm/i915: Disable preemption and sleeping while using the punit sideband Chris Wilson
2018-01-15 11:49 ` Hans de Goede
2018-01-15 10:28 ` [PATCH v2 3/6] drm/i915: Lift acquiring the vlv punit magic to a common sb-get Chris Wilson
2018-01-15 10:28 ` [PATCH v2 4/6] drm/i915: Lift sideband locking for vlv_punit_(read|write) Chris Wilson
2018-01-15 10:28 ` [PATCH v2 5/6] drm/i915: Reduce RPS update frequency on Valleyview/Cherryview Chris Wilson
2018-01-15 10:28 ` [PATCH v2 6/6] Revert "drm/i915: Avoid tweaking evaluation thresholds on Baytrail v3" Chris Wilson
2018-01-15 11:03 ` ✓ Fi.CI.BAT: success for series starting with [v2,1/6] drm/i915: Lock out execlist tasklet while peeking inside for busy-stats Patchwork
2018-01-15 13:09 ` ✗ Fi.CI.IGT: failure " Patchwork
2018-01-17 13:22 ` Mika Kuoppala [this message]
2018-01-17 13:28 ` [PATCH v2 1/6] " Chris Wilson
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=87k1wgipry.fsf@gaia.fi.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.