• Chris Wilson's avatar
    drm/i915: Always reset vma->ggtt_view.pages cache on unbinding · 016a65a3
    Chris Wilson authored
    With the introduction of multiple views of an obj in the same vm, each
    vma was taught to cache its copy of the pages (so that different views
    could have different page arrangements). However, this missed decoupling
    those vma->ggtt_view.pages when the vma released its reference on the
    obj->pages. As we don't always free the vma, this leads to a possible
    scenario (e.g. execbuffer interrupted by the shrinker) where the vma
    points to a stale obj->pages, and explodes.
    
    Fixes regression from commit fe14d5f4
    Author: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Date:   Wed Dec 10 17:27:58 2014 +0000
    
        drm/i915: Infrastructure for supporting different GGTT views per object
    
    Tvrtko says, if someone else will be confused how this can happen, key
    is the reservation execbuffer path. That puts the VMA on the exec_list
    which prevents i915_vma_unbind and i915_gem_vma_destroy from fully
    destroying the VMA. So the VMA is left existing as an empty object in
    the list - unbound and disassociated with the backing store. Kind of a
    cached memory object. And then re-using it needs to clear the cached
    pages pointer which is fixed above.
    
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1227892Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Michel Thierry <michel.thierry@intel.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    [Jani: Added Tvrtko's explanation to commit message.]
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    016a65a3
i915_gem.c 132 KB