• Chris Wilson's avatar
    drm/i915/gt: Do not schedule normal requests immediately along virtual · 511b6d9a
    Chris Wilson authored
    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: 6d06779e ("drm/i915: Load balancing across a virtual engine")
    Testcase: igt/gem_exec_balancer/sliced
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: <stable@vger.kernel.org> # v5.3+
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200526090753.11329-2-chris@chris-wilson.co.uk
    511b6d9a
i915_request.c 52.3 KB