• Daniel Vetter's avatar
    drm/i915: Fix up the vma aliasing ppgtt binding · 0875546c
    Daniel Vetter authored
    Currently we have the problem that the decision whether ptes need to
    be (re)written is splattered all over the codebase. Move all that into
    i915_vma_bind. This needs a few changes:
    - Just reuse the PIN_* flags for i915_vma_bind and do the conversion
      to vma->bound in there to avoid duplicating the conversion code all
      over.
    - We need to make binding for EXECBUF (i.e. pick aliasing ppgtt if
      around) explicit, add PIN_USER for that.
    - Two callers want to update ptes, give them a PIN_UPDATE for that.
    
    Of course we still want to avoid double-binding, but that should be
    taken care of:
    - A ppgtt vma will only ever see PIN_USER, so no issue with
      double-binding.
    - A ggtt vma with aliasing ppgtt needs both types of binding, and we
      track that properly now.
    - A ggtt vma without aliasing ppgtt could be bound twice. In the
      lower-level ->bind_vma functions hence unconditionally set
      GLOBAL_BIND when writing the ggtt ptes.
    
    There's still a bit room for cleanup, but that's for follow-up
    patches.
    
    v2: Fixup fumbles.
    
    v3: s/PIN_EXECBUF/PIN_USER/ for clearer meaning, suggested by Chris.
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    0875546c
i915_drv.h 100 KB