• Chris Wilson's avatar
    drm/i915: Fix erroneous dereference of batch_obj inside reset_status · 4db080f9
    Chris Wilson authored
    As the rings may be processed and their requests deallocated in a
    different order to the natural retirement during a reset,
    
    /* Whilst this request exists, batch_obj will be on the
     * active_list, and so will hold the active reference. Only when this
     * request is retired will the the batch_obj be moved onto the
     * inactive_list and lose its active reference. Hence we do not need
     * to explicitly hold another reference here.
     */
    
    is violated, and the batch_obj may be dereferenced after it had been
    freed on another ring. This can be simply avoided by processing the
    status update prior to deallocating any requests.
    
    Fixes regression (a possible OOPS following a GPU hang) from
    commit aa60c664
    Author: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Date:   Wed Jun 12 15:13:20 2013 +0300
    
        drm/i915: find guilty batch buffer on ring resets
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
    [danvet: Add the code comment Chris supplied.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    4db080f9
i915_gem.c 127 KB