• Chris Wilson's avatar
    drm/i915: Keep ring->active_list and ring->requests_list consistent · 832a3aad
    Chris Wilson authored
    If we retire requests last, we may use a later seqno and so clear
    the requests lists without clearing the active list, leading to
    confusion. Hence we should retire requests first for consistency with
    the early return. The order used to be important as the lifecycle for
    the object on the active list was determined by request->seqno. However,
    the requests themselves are now reference counted removing the
    constraint from the order of retirement.
    
    Fixes regression from
    
    commit 1b5a433a
    Author: John Harrison <John.C.Harrison@Intel.com>
    Date:   Mon Nov 24 18:49:42 2014 +0000
    
        drm/i915: Convert 'i915_seqno_passed' calls into 'i915_gem_request_completed
    '
    
    and a
    
    	WARNING: CPU: 0 PID: 1383 at drivers/gpu/drm/i915/i915_gem_evict.c:279 i915_gem_evict_vm+0x10c/0x140()
    	WARN_ON(!list_empty(&vm->active_list))
    
    Identified by updating WATCH_LISTS:
    
    	[drm:i915_verify_lists] *ERROR* blitter ring: active list not empty, but no requests
    	WARNING: CPU: 0 PID: 681 at drivers/gpu/drm/i915/i915_gem.c:2751 i915_gem_retire_requests_ring+0x149/0x230()
    	WARN_ON(i915_verify_lists(ring->dev))
    
    Note that this is only a problem in evict_vm where the following happens
    after a retire_request has cleaned out all requests, but not all active
    bo:
    - intel_ring_idle called from i915_gpu_idle notices that no requests are
      outstanding and immediately returns.
    - i915_gem_retire_requests_ring called from i915_gem_retire_requests also
      immediately returns when there's no request, still leaving the bo on the
      active list.
    - evict_vm hits the WARN_ON(!list_empty(&vm->active_list)) after evicting
      all active objects that there's still stuff left that shouldn't be
      there.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: John Harrison <John.C.Harrison@Intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    832a3aad
i915_gem.c 136 KB