]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/i915: Flush tasklet submission before sleeping on i915_request_wait
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 15 Oct 2019 13:26:06 +0000 (14:26 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 15 Oct 2019 15:42:47 +0000 (16:42 +0100)
If the system is being slow and userspace is racing ahead of the GPU and
finds itself waiting for the GPU to catch up, before the process sleeps
give the tasklet a kick, bypassing ksoftirqd. If the system is
overloaded, then ksoftirqd may be delayed incurring additional latency
to our user.

This should not be a frequent problem, but in the past we have observed
several hundred millisecond delays before ksoftirqd services an
interrupt, so burn a few cycles to lend a helping hand.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191015132606.14349-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_request.c

index b8a54572a4f87ffa675de25dd56f829d0b8255a5..f1cadad4e81cacfce23887098bf83e6c028f36a2 100644 (file)
@@ -1496,6 +1496,7 @@ long i915_request_wait(struct i915_request *rq,
                        break;
                }
 
+               intel_engine_flush_submission(rq->engine);
                timeout = io_schedule_timeout(timeout);
        }
        __set_current_state(TASK_RUNNING);