drm/i915: Only attempt to pass the first request to execlists
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 24 Jan 2017 11:00:07 +0000 (11:00 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 24 Jan 2017 16:00:13 +0000 (16:00 +0000)
Only the first request added to the execlist queue can be submitted. If
this request is not the first request on the queue, it means that there
are already higher priority requests waiting upon the tasklet and
kicking it will make no difference.

This is more relevant for a later patch, where we more eagerly try and
kick the tasklet to handle the submission of new requests.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170124110009.28947-6-chris@chris-wilson.co.uk
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
drivers/gpu/drm/i915/intel_lrc.c

index 99ab2d70be37584e8583bdd8eadbf5cef757fb49..11568ab9f248ecae21db4f25d89c399039873405 100644 (file)
@@ -651,10 +651,11 @@ static void execlists_submit_request(struct drm_i915_gem_request *request)
        /* Will be called from irq-context when using foreign fences. */
        spin_lock_irqsave(&engine->timeline->lock, flags);
 
-       if (insert_request(&request->priotree, &engine->execlist_queue))
+       if (insert_request(&request->priotree, &engine->execlist_queue)) {
                engine->execlist_first = &request->priotree.node;
-       if (execlists_elsp_idle(engine))
-               tasklet_hi_schedule(&engine->irq_tasklet);
+               if (execlists_elsp_idle(engine))
+                       tasklet_hi_schedule(&engine->irq_tasklet);
+       }
 
        spin_unlock_irqrestore(&engine->timeline->lock, flags);
 }