• C
    drm/i915: Hold a reference to the object whilst unbinding the eviction list · af626103
    Chris Wilson 提交于
    During heavy aperture thrashing we may be forced to wait upon several active
    objects during eviction. The active list may be the last reference to
    these objects and so the action of waiting upon one of them may cause
    another to be freed (and itself unbound). To prevent the object
    disappearing underneath us, we need to acquire and hold a reference
    whilst unbinding.
    
    This should fix the reported page refcount OOPS:
    
    kernel BUG at drivers/gpu/drm/i915/i915_gem.c:1444!
    ...
    RIP: 0010:[<ffffffffa0093026>]  [<ffffffffa0093026>] i915_gem_object_put_pages+0x25/0xf5 [i915]
    Call Trace:
     [<ffffffffa009481d>] i915_gem_object_unbind+0xc5/0x1a7 [i915]
     [<ffffffffa0098ab2>] i915_gem_evict_something+0x3bd/0x409 [i915]
     [<ffffffffa0027923>] ? drm_gem_object_lookup+0x27/0x57 [drm]
     [<ffffffffa0093bc3>] i915_gem_object_bind_to_gtt+0x1d3/0x279 [i915]
     [<ffffffffa0095b30>] i915_gem_object_pin+0xa3/0x146 [i915]
     [<ffffffffa0027948>] ? drm_gem_object_lookup+0x4c/0x57 [drm]
     [<ffffffffa00961bc>] i915_gem_do_execbuffer+0x50d/0xe32 [i915]
    Reported-by: NShawn Starr <shawn.starr@rogers.com>
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=18902Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    af626103
i915_gem_evict.c 8.3 KB