• C
    drm/i915: Move timeline from GTT to ring · 65fcb806
    Chris Wilson 提交于
    In the future, we want to move a request between engines. To achieve
    this, we first realise that we have two timelines in effect here. The
    first runs through the GTT is required for ordering vma access, which is
    tracked currently by engine. The second is implied by sequential
    execution of commands inside the ringbuffer. This timeline is one that
    maps to userspace's expectations when submitting requests (i.e. given the
    same context, batch A is executed before batch B). As the rings's
    timelines map to userspace and the GTT timeline an implementation
    detail, move the timeline from the GTT into the ring itself (per-context
    in logical-ring-contexts/execlists, or a global per-engine timeline for
    the shared ringbuffers in legacy submission.
    
    The two timelines are still assumed to be equivalent at the moment (no
    migrating requests between engines yet) and so we can simply move from
    one to the other without adding extra ordering.
    
    v2: Reinforce that one isn't allowed to mix the engine execution
    timeline with the client timeline from userspace (on the ring).
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180502163839.3248-1-chris@chris-wilson.co.uk
    65fcb806
i915_gem.c 161.9 KB