aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/armada/armada_crtc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index 9a0cc09e6653..ef6be294c07d 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -945,18 +945,15 @@ static int armada_drm_crtc_page_flip(struct drm_crtc *crtc,
945 armada_reg_queue_end(work->regs, i); 945 armada_reg_queue_end(work->regs, i);
946 946
947 /* 947 /*
948 * Hold the old framebuffer for the work - DRM appears to drop our 948 * Ensure that we hold a reference on the new framebuffer.
949 * reference to the old framebuffer in drm_mode_page_flip_ioctl(). 949 * This has to match the behaviour in mode_set.
950 */ 950 */
951 drm_framebuffer_reference(work->old_fb); 951 drm_framebuffer_reference(fb);
952 952
953 ret = armada_drm_crtc_queue_frame_work(dcrtc, work); 953 ret = armada_drm_crtc_queue_frame_work(dcrtc, work);
954 if (ret) { 954 if (ret) {
955 /* 955 /* Undo our reference above */
956 * Undo our reference above; DRM does not drop the reference 956 drm_framebuffer_unreference(fb);
957 * to this object on error, so that's okay.
958 */
959 drm_framebuffer_unreference(work->old_fb);
960 kfree(work); 957 kfree(work);
961 return ret; 958 return ret;
962 } 959 }