• Chris Wilson's avatar
    drm/i915/scheduler: Record all dependencies upon request construction · 52e54209
    Chris Wilson authored
    The scheduler needs to know the dependencies of each request for the
    lifetime of the request, as it may choose to reschedule the requests at
    any time and must ensure the dependency tree is not broken. This is in
    additional to using the fence to only allow execution after all
    dependencies have been completed.
    
    One option was to extend the fence to support the bidirectional
    dependency tracking required by the scheduler. However the mismatch in
    lifetimes between the submit fence and the request essentially meant
    that we had to build a completely separate struct (and we could not
    simply reuse the existing waitqueue in the fence for one half of the
    dependency tracking). The extra dependency tracking simply did not mesh
    well with the fence, and keeping it separate both keeps the fence
    implementation simpler and allows us to extend the dependency tracking
    into a priority tree (whilst maintaining support for reordering the
    tree).
    
    To avoid the additional allocations and list manipulations, the use of
    the priotree is disabled when there are no schedulers to use it.
    
    v2: Create a dedicated slab for i915_dependency.
        Rename the lists.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161114204105.29171-7-chris@chris-wilson.co.uk
    52e54209
i915_gem_request.c 32.5 KB