• Chris Wilson's avatar
    drm/i915: Tighten reset_counter for reset status · d98c52cf
    Chris Wilson authored
    In the reset_counter, we use two bits to track a GPU hang and reset. The
    low bit is a "reset-in-progress" flag that we set to signal when we need
    to break waiters in order for the recovery task to grab the mutex. As
    soon as the recovery task has the mutex, we can clear that flag (which
    we do by incrementing the reset_counter thereby incrementing the gobal
    reset epoch). By clearing that flag when the recovery task holds the
    struct_mutex, we can forgo a second flag that simply tells GEM to ignore
    the "reset-in-progress" flag.
    
    The second flag we store in the reset_counter is whether the
    reset failed and we consider the GPU terminally wedged. Whilst this flag
    is set, all access to the GPU (at least through GEM rather than direct mmio
    access) is verboten.
    
    PS: Fun is in store, as in the future we want to move from a global
    reset epoch to a per-engine reset engine with request recovery.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/1460565315-7748-6-git-send-email-chris@chris-wilson.co.uk
    d98c52cf
i915_drv.c 49.5 KB