drm/i915: Flush tasklet submission before sleeping on i915_request_wait
diff mbox series

Message ID 20191015132606.14349-1-chris@chris-wilson.co.uk
State New
Headers show
Series
  • drm/i915: Flush tasklet submission before sleeping on i915_request_wait
Related show

Commit Message

Chris Wilson Oct. 15, 2019, 1:26 p.m. UTC
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>
---
 drivers/gpu/drm/i915/i915_request.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Tvrtko Ursulin Oct. 15, 2019, 2:45 p.m. UTC | #1
On 15/10/2019 14:26, Chris Wilson wrote:
> 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>
> ---
>   drivers/gpu/drm/i915/i915_request.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
> index b8a54572a4f8..f1cadad4e81c 100644
> --- a/drivers/gpu/drm/i915/i915_request.c
> +++ b/drivers/gpu/drm/i915/i915_request.c
> @@ -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);
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko

Patch
diff mbox series

diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index b8a54572a4f8..f1cadad4e81c 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -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);