Commit e0313db0 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin

drm/i915: Only grab timestamps when needed

No need to call ktime_get_raw_ns twice per unlimited wait and can
also elimate a local variable.

v2: Added comment about silencing the compiler warning. (Daniel Vetter)
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarDave Gordon <david.s.gordon@intel.com>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1452870672-13901-1-git-send-email-tvrtko.ursulin@linux.intel.com
parent 2da80b57
...@@ -1251,7 +1251,7 @@ int __i915_wait_request(struct drm_i915_gem_request *req, ...@@ -1251,7 +1251,7 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
int state = interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE; int state = interruptible ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
unsigned long timeout_expire; unsigned long timeout_expire;
s64 before, now; s64 before = 0; /* Only to silence a compiler warning. */
int ret; int ret;
WARN(!intel_irqs_enabled(dev_priv), "IRQs disabled"); WARN(!intel_irqs_enabled(dev_priv), "IRQs disabled");
...@@ -1271,14 +1271,17 @@ int __i915_wait_request(struct drm_i915_gem_request *req, ...@@ -1271,14 +1271,17 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
return -ETIME; return -ETIME;
timeout_expire = jiffies + nsecs_to_jiffies_timeout(*timeout); timeout_expire = jiffies + nsecs_to_jiffies_timeout(*timeout);
/*
* Record current time in case interrupted by signal, or wedged.
*/
before = ktime_get_raw_ns();
} }
if (INTEL_INFO(dev_priv)->gen >= 6) if (INTEL_INFO(dev_priv)->gen >= 6)
gen6_rps_boost(dev_priv, rps, req->emitted_jiffies); gen6_rps_boost(dev_priv, rps, req->emitted_jiffies);
/* Record current time in case interrupted by signal, or wedged */
trace_i915_gem_request_wait_begin(req); trace_i915_gem_request_wait_begin(req);
before = ktime_get_raw_ns();
/* Optimistic spin for the next jiffie before touching IRQs */ /* Optimistic spin for the next jiffie before touching IRQs */
ret = __i915_spin_request(req, state); ret = __i915_spin_request(req, state);
...@@ -1343,11 +1346,10 @@ int __i915_wait_request(struct drm_i915_gem_request *req, ...@@ -1343,11 +1346,10 @@ int __i915_wait_request(struct drm_i915_gem_request *req,
finish_wait(&ring->irq_queue, &wait); finish_wait(&ring->irq_queue, &wait);
out: out:
now = ktime_get_raw_ns();
trace_i915_gem_request_wait_end(req); trace_i915_gem_request_wait_end(req);
if (timeout) { if (timeout) {
s64 tres = *timeout - (now - before); s64 tres = *timeout - (ktime_get_raw_ns() - before);
*timeout = tres < 0 ? 0 : tres; *timeout = tres < 0 ? 0 : tres;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment