drm/i915: hold ref on flip object until it completes

This will prevent things from falling over if the user frees the flip
buffer before we complete the flip, since we'll hold an internal
reference.

Reported-by: Kristian Høgsberg <krh@bitplanet.net>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Eric Anholt <eric@anholt.net>

authored by

Jesse Barnes and committed by
Eric Anholt
75dfca80 84b79f8d

+3 -1
+3 -1
drivers/gpu/drm/i915/intel_display.c
··· 4094 4095 mutex_lock(&work->dev->struct_mutex); 4096 i915_gem_object_unpin(work->old_fb_obj); 4097 drm_gem_object_unreference(work->old_fb_obj); 4098 mutex_unlock(&work->dev->struct_mutex); 4099 kfree(work); ··· 4222 return ret; 4223 } 4224 4225 - /* Reference the old fb object for the scheduled work. */ 4226 drm_gem_object_reference(work->old_fb_obj); 4227 4228 crtc->fb = fb; 4229 i915_gem_object_flush_write_domain(obj);
··· 4094 4095 mutex_lock(&work->dev->struct_mutex); 4096 i915_gem_object_unpin(work->old_fb_obj); 4097 + drm_gem_object_unreference(work->pending_flip_obj); 4098 drm_gem_object_unreference(work->old_fb_obj); 4099 mutex_unlock(&work->dev->struct_mutex); 4100 kfree(work); ··· 4221 return ret; 4222 } 4223 4224 + /* Reference the objects for the scheduled work. */ 4225 drm_gem_object_reference(work->old_fb_obj); 4226 + drm_gem_object_reference(obj); 4227 4228 crtc->fb = fb; 4229 i915_gem_object_flush_write_domain(obj);