• Chris Wilson's avatar
    drm/i915: Copy across scheduler behaviour flags across submit fences · c81471f5
    Chris Wilson authored
    We want the bonded request to have the same scheduler properties as its
    master so that it is placed at the same depth in the queue. For example,
    consider we have requests A, B and B', where B & B' are a bonded pair to
    run in parallel on two engines.
    
    	A -> B
         	     \- B'
    
    B will run after A and so may be scheduled on an idle engine and wait on
    A using a semaphore. B' sees B being executed and so enters the queue on
    the same engine as A. As B' did not inherit the semaphore-chain from B,
    it may have higher precedence than A and so preempts execution. However,
    B' then sits on a semaphore waiting for B, who is waiting for A, who is
    blocked by B.
    
    Ergo B' needs to inherit the scheduler properties from B (i.e. the
    semaphore chain) so that it is scheduled with the same priority as B and
    will not be executed ahead of Bs dependencies.
    
    Furthermore, to prevent the priorities changing via the expose fence on
    B', we need to couple in the dependencies for PI. This requires us to
    relax our sanity-checks that dependencies are strictly in order.
    
    v2: Synchronise (B, B') execution on all platforms, regardless of using
    a scheduler, any no-op syncs should be elided.
    
    Fixes: ee113690 ("drm/i915/execlists: Virtual engine bonding")
    Closes: https://gitlab.freedesktop.org/drm/intel/issues/464
    Testcase: igt/gem_exec_balancer/bonded-chain
    Testcase: igt/gem_exec_balancer/bonded-semaphore
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20191210151332.3902215-1-chris@chris-wilson.co.uk
    c81471f5
i915_scheduler.c 14.4 KB