aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_uncore.h
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-05-26 14:22:09 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-05-26 15:58:21 +0100
commitc9e0c6da53231f685d7dbd3d420483e1ede212e2 (patch)
treeaf1a28c3fbab35e62418c7a05929fe436cc9679a /drivers/gpu/drm/i915/intel_uncore.h
parentdrm/i915/guc: capture GuC logs if FW fails to load (diff)
downloadlinux-dev-c9e0c6da53231f685d7dbd3d420483e1ede212e2.tar.xz
linux-dev-c9e0c6da53231f685d7dbd3d420483e1ede212e2.zip
drm/i915: Keep the forcewake timer alive for 1ms past the most recent use
Currently the timer is armed for 1ms after the first use and is killed immediately, dropping the forcewake as early as possible. However, for very frequent operations the forcewake dance has a large impact on latency and keeping the timer alive until we are idle is preferred. To achieve this, if we call intel_uncore_forcewake_get whilst the timer is alive (repeated use), then set a flag to restart the timer on expiry rather than drop the forcewake usage count. The timer is racy, the consequence of the race is to expire the timer earlier than is now desired but does not impact on correct behaviour. The offset the race slightly, we set the active flag again on intel_uncore_forcewake_put. The effect should be to reduce the jitter of reacquiring the fw every 1ms on a busy system. However, the cost is to keep the timer alive for an extra 1ms on a nearly idle system. We chose to incur the jitter previously to keep the timer off for as much as possible. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170526132209.14640-1-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/intel_uncore.h')
-rw-r--r--drivers/gpu/drm/i915/intel_uncore.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h
index ff6fe2bb0ccf..5f90278da461 100644
--- a/drivers/gpu/drm/i915/intel_uncore.h
+++ b/drivers/gpu/drm/i915/intel_uncore.h
@@ -96,6 +96,7 @@ struct intel_uncore {
enum forcewake_domain_id id;
enum forcewake_domains mask;
unsigned int wake_count;
+ bool active;
struct hrtimer timer;
i915_reg_t reg_set;
i915_reg_t reg_ack;