• Ben Widawsky's avatar
    drm/i915: Track page table reload need · 563222a7
    Ben Widawsky authored
    This patch was formerly known as, "Force pd restore when PDEs change,
    gen6-7." I had to change the name because it is needed for GEN8 too.
    
    The real issue this is trying to solve is when a new object is mapped
    into the current address space. The GPU does not snoop the new mapping
    so we must do the gen specific action to reload the page tables.
    
    GEN8 and GEN7 do differ in the way they load page tables for the RCS.
    GEN8 does so with the context restore, while GEN7 requires the proper
    load commands in the command streamer. Non-render is similar for both.
    
    Caveat for GEN7
    The docs say you cannot change the PDEs of a currently running context.
    We never map new PDEs of a running context, and expect them to be
    present - so I think this is okay. (We can unmap, but this should also
    be okay since we only unmap unreferenced objects that the GPU shouldn't
    be tryingto va->pa xlate.) The MI_SET_CONTEXT command does have a flag
    to signal that even if the context is the same, force a reload. It's
    unclear exactly what this does, but I have a hunch it's the right thing
    to do.
    
    The logic assumes that we always emit a context switch after mapping new
    PDEs, and before we submit a batch. This is the case today, and has been
    the case since the inception of hardware contexts. A note in the comment
    let's the user know.
    
    It's not just for gen8. If the current context has mappings change, we
    need a context reload to switch
    
    v2: Rebased after ppgtt clean up patches. Split the warning for aliasing
    and true ppgtt options. And do not break aliasing ppgtt, where to->ppgtt
    is always null.
    
    v3: Invalidate PPGTT TLBs inside alloc_va_range.
    
    v4: Rename ppgtt_invalidate_tlbs to mark_tlbs_dirty and move
    pd_dirty_rings from i915_address_space to i915_hw_ppgtt. Fixes when
    neither ctx->ppgtt and aliasing_ppgtt exist.
    
    v5: Removed references to teardown_va_range.
    
    v6: Updated needs_pd_load_pre/post.
    
    v7: Fix pd_dirty_rings check in needs_pd_load_post, and update/move
    comment about updated PDEs to object_pin/bind (Mika).
    
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v2+)
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    563222a7
i915_gem_execbuffer.c 47.1 KB