• Tomas Elf's avatar
    drm/i915: Snapshot seqno of most recently submitted request. · 94f7bbe1
    Tomas Elf authored
    The hang checker needs to inspect whether or not the ring request list is empty
    as well as if the given engine has reached or passed the most recently
    submitted request. The problem with this is that the hang checker cannot grab
    the struct_mutex, which is required in order to safely inspect requests since
    requests might be deallocated during inspection. In the past we've had kernel
    panics due to this very unsynchronized access in the hang checker.
    
    One solution to this problem is to not inspect the requests directly since
    we're only interested in the seqno of the most recently submitted request - not
    the request itself. Instead the seqno of the most recently submitted request is
    stored separately, which the hang checker then inspects, circumventing the
    issue of synchronization from the hang checker entirely.
    
    This fixes a regression introduced in
    
    commit 44cdd6d2
    Author: John Harrison <John.C.Harrison@Intel.com>
    Date:   Mon Nov 24 18:49:40 2014 +0000
    
        drm/i915: Convert 'ring_idle()' to use requests not seqnos
    
    v2 (Chris Wilson):
    - Pass current engine seqno to ring_idle() from i915_hangcheck_elapsed() rather
    than compute it over again.
    - Remove extra whitespace.
    
    Issue: VIZ-5998
    Signed-off-by: default avatarTomas Elf <tomas.elf@intel.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    [danvet: Add regressing commit citation provided by Chris.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    94f7bbe1
intel_ringbuffer.h 15.2 KB