drm/i915/gt: Do not schedule normal requests immediately along virtual
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 26 May 2020 09:07:53 +0000 (10:07 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 27 May 2020 08:07:45 +0000 (09:07 +0100)
commit511b6d9aed417739b6aa49d0b6b4354ad21020f1
treefe876033c61eabceb2d593f0522a02e6e05b5572
parentffb0c600c240103f6f34e07892a7e0a75502b243
drm/i915/gt: Do not schedule normal requests immediately along virtual

When we push a virtual request onto the HW, we update the rq->engine to
point to the physical engine. A request that is then submitted by the
user that waits upon the virtual engine, but along the physical engine
in use, will then see that it is due to be submitted to the same engine
and take a shortcut (and be queued without waiting for the completion
fence). However, the virtual request may be preempted (either by higher
priority users, or by timeslicing) and removed from the physical engine
to be migrated over to one of its siblings. The dependent normal request
however is oblivious to the removal of the virtual request and remains
queued to execute on HW, believing that once it reaches the head of its
queue all of its predecessors will have completed executing!

v2: Beware restriction of signal->execution_mask prior to submission.

Fixes: 6d06779e8672 ("drm/i915: Load balancing across a virtual engine")
Testcase: igt/gem_exec_balancer/sliced
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: <stable@vger.kernel.org> # v5.3+
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200526090753.11329-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_request.c