• D
    drm/i915: Disable full ppgtt by default · 93a25a9e
    Daniel Vetter 提交于
    There are too many oustanding issues:
    
    - Fence handling in the current code is broken. There's a patch series
      from me, but it's blocked on and extended review (which includes
      writing the testcases).
    
    - IOMMU mapping handling is broken, we need to properly refcount it -
      currently it gets destroyed when the first vma is unbound, so way
      too early.
    
    - There's a pending reset issue on snb. Since Mika's reset work and
      full ppgtt have been pulled in in separate branches and ended up
      intermittingly breaking each another it's unclear who's the exact
      culprit here.
    
    - We still have persistent evidince of crazy recursion bugs through
      vma_unbind and ppgtt_relase, e.g.
    
      https://bugs.freedesktop.org/show_bug.cgi?id=73383
    
      This issue (and a few others meanwhile resolved) have blocked our
      performance measuring/tuning group since 3 months.
    
    - Secure batch dispatching is broken. This is blocking Brad Volkin's
      command checker work since 3 months.
    
    All these issues are confirmed to only happen when full ppgtt is
    enabled, falling back to aliasing ppgtt resolves them. But even
    aliasing ppgtt itself still has a regression:
    
    - We currently unconditionally bind objects into the aliasing ppgtt,
      which means all priviledged objects like ringbuffers are visible to
      unpriviledged access again. On top of that this also breaks the
      command checker for aliasing ppgtt, since it can't hide the
      validated batch any more.
    
    Furthermore topic/full-ppgtt has never been reviewed:
    
    - Lifetime rules around vma unbinding/release are unclear, resulting
      into this awesome hack called ppgtt_release. Which seems to take the
      blame for most of the recursion fallout.
    
    - Context/ring init works different on gpu reset than anywhere else.
      Such differeneces have in the past always lead to really hard to
      track down bugs.
    
    - Aliasing ppgtt is treated in a bunch of places as a real address
      space, but it isn't - the real address space is always the global
      gtt in that case. This results in a bit a mess between contexts and
      ppgtt object, further complication the context/ppgtt/vma lifetime
      rules.
    
    - We don't have any docs describing the overall concepts introduced
      with full ppgtt. A short, concise overview describing vmas and some
      of the strange bits around them (like the unbound vmas used by
      execbuf, or the new binding rules) really is needed.
    
    Note that a lot of the post topic/full-ppgtt merge fallout has already
    been addressed, this entire list here of 10 issues really only contains
    the still outstanding issues.
    
    Finally the 3.15 merge window is approaching and I think we need to
    use the remaining time to ensure that our fallback option of using
    aliasing ppgtt is in solid shape. Hence I think it's time to throw the
    switch. While at it demote the helper from static inline status
    because really.
    
    Cc: Ben Widawsky <ben@bwidawsk.net>
    Cc: Dave Airlie <airlied@gmail.com>
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    93a25a9e
i915_drv.h 81.5 KB