• Chris Wilson's avatar
    drm/i915: Restore context and pd for ringbuffer submission after reset · c0dcb203
    Chris Wilson authored
    Following a reset, the context and page directory registers are lost.
    However, the queue of requests that we resubmit after the reset may
    depend upon them - the registers are restored from a context image, but
    that restore may be inhibited and may simply be absent from the request
    if it was in the middle of a sequence using the same context. If we
    prime the CCID/PD registers with the first request in the queue (even
    for the hung request), we prevent invalid memory access for the
    following requests (and continually hung engines).
    
    v2: Magic BIT(8), reserved for future use but still appears unused.
    v3: Some commentary on handling innocent vs guilty requests
    v4: Add a wait for PD_BASE fetch. The reload appears to be instant on my
    Ivybridge, but this bit probably exists for a reason.
    
    Fixes: 821ed7df ("drm/i915: Update reset path to fix incomplete requests")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170207152437.4252-1-chris@chris-wilson.co.ukReviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
    c0dcb203
intel_ringbuffer.c 75.1 KB