• Ben Widawsky's avatar
    drm/i915: Initialize all contexts · 6702cf16
    Ben Widawsky authored
    The problem is we're going to switch to a new context, which could be
    the default context. The plan was to use restore inhibit, which would be
    fine, except if we are using dynamic page tables (which we will). If we
    use dynamic page tables and we don't load new page tables, the previous
    page tables might go away, and future operations will fault.
    
    CTXA runs.
    switch to default, restore inhibit
    CTXA dies and has its address space taken away.
    Run CTXB, tries to save using the context A's address space - this
    fails.
    
    The general solution is to make sure every context has it's own state,
    and its own address space. For cases when we must restore inhibit, first
    thing we do is load a valid address space. I thought this would be
    enough, but apparently there are references within the context itself
    which will refer to the old address space - therefore, we also must
    reinitialize.
    
    v2: to->ppgtt is only valid in full ppgtt.
    v3: Rebased.
    v4: Make post PDP update clearer.
    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>
    6702cf16
i915_gem_context.c 27.3 KB