[Intel-gfx] [PATCH] drm/i915/gt: Defer breadcrumb processing to after the irq handler

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Nov 27 13:39:56 UTC 2019


On 27/11/2019 11:58, Chris Wilson wrote:
> The design of our interrupt handlers is that we ack the receipt of the
> interrupt first, inside the critical section where the master interrupt
> control is off and other cpus cannot start processing the next
> interrupt; and then process the interrupt events afterwards. However,
> Icelake introduced a whole new set of banked GT_IIR that are inherently
> serialised and slow to retrieve the IIR and must be processed within the
> critical section. We can still push our breadcrumbs out of this critical
> section by using our irq_worker. On bdw+, this should not make too much
> of a difference as we only slightly defer the breadcrumbs, but on icl+
> this should make a big difference to our throughput of interrupts from
> concurrently executing engines.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/gt/intel_gt_irq.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_irq.c b/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> index 973ee7eded64..332b12a574fb 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> @@ -28,7 +28,7 @@ cs_irq_handler(struct intel_engine_cs *engine, u32 iir)
>   		tasklet = true;
>   
>   	if (iir & GT_RENDER_USER_INTERRUPT) {
> -		intel_engine_breadcrumbs_irq(engine);
> +		intel_engine_queue_breadcrumbs(engine);
>   		tasklet |= intel_engine_needs_breadcrumb_tasklet(engine);
>   	}
>   
> 

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

Regards,

Tvrtko


More information about the Intel-gfx mailing list