On 03/06/16 17:08, Chris Wilson wrote:
Avoid the two calls to ktime_get_raw_ns() (at best it reads the TSC) as we only need to compute the elapsed time for a timed wait. v2: Eliminate the unused local variable reducing the function size by 64 bytes (using the storage space on the callers stack rather than adding to our stack frame). Writing the code this emits smaller and faster code for the normal case. Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_gem.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 269d00a40483..fdbad07b5f42 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -1212,7 +1212,6 @@ int __i915_wait_request(struct drm_i915_gem_request *req, DEFINE_WAIT(reset); struct intel_wait wait; unsigned long timeout_remain; - s64 before = 0; /* Only to silence a compiler warning. */ int ret = 0; might_sleep(); @@ -1231,12 +1230,9 @@ int __i915_wait_request(struct drm_i915_gem_request *req, if (*timeout == 0) return -ETIME; + /* Record current time in case interrupted, or wedged */ timeout_remain = nsecs_to_jiffies_timeout(*timeout); - - /* - * Record current time in case interrupted by signal, or wedged. - */ - before = ktime_get_raw_ns(); + *timeout += ktime_get_raw_ns(); } trace_i915_gem_request_wait_begin(req); @@ -1299,9 +1295,9 @@ complete: trace_i915_gem_request_wait_end(req); if (timeout) { - s64 tres = *timeout - (ktime_get_raw_ns() - before); - - *timeout = tres < 0 ? 0 : tres; + *timeout -= ktime_get_raw_ns(); + if (*timeout < 0) + *timeout = 0; /* * Apparently ktime isn't accurate enough and occasionally has a
Still a no from me on this one. Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx