• Oscar Mateo's avatar
    drm/i915: Gracefully handle obj not bound to GGTT in is_pin_display · 19656430
    Oscar Mateo authored
    Otherwise, we do a NULL pointer dereference.
    
    I've seen this happen while handling an error in
    i915_gem_object_pin_to_display_plane():
    
    If i915_gem_object_set_cache_level() fails, we call is_pin_display()
    to handle the error. At this point, the object is still not pinned
    to GGTT and maybe not even bound, so we have to check before we
    dereference its GGTT vma.
    
    The IGT kms_flip/bo-too-big tests for this bug.
    
    v2: Chris Wilson says restoring the old value is easier, but that
    is_pin_display is useful as a theory of operation. Take the solomonic
    decision: at least this way is_pin_display is a little more robust
    (until Chris can kill it off).
    
    v3: Chris suggests the WARN in i915_gem_obj_to_ggtt has outlived its
    usefulness: add a reminder to remove it.
    
    Issue: VIZ-3772
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Testcase: igt/kms_flip/bo-too-big
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    19656430
i915_gem.c 130 KB