• Chris Wilson's avatar
    drm/i915/execlists: Suppress redundant preemption · 1e3f697e
    Chris Wilson authored
    On unwinding the active request we give it a small (limited to internal
    priority levels) boost to prevent it from being gazumped a second time.
    However, this means that it can be promoted to above the request that
    triggered the preemption request, causing a preempt-to-idle cycle for no
    change. We can avoid this if we take the boost into account when
    checking if the preemption request is valid.
    
    v2: After preemption the active request will be after the preemptee if
    they end up with equal priority.
    
    v3: Tvrtko pointed out that this, the existing logic, makes
    I915_PRIORITY_WAIT non-preemptible. Document this interesting quirk!
    
    v4: Prove Tvrtko was right about WAIT being non-preemptible and test it.
    v5: Except not all priorities were made equal, and the WAIT not preempting
    is only if we start off as !NEWCLIENT.
    
    v6: More commentary after coming to an understanding about what I had
    forgotten to say.
    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/20190301170901.8340-1-chris@chris-wilson.co.uk
    1e3f697e
intel_lrc.c 88.3 KB