drm: Don't set the plane->fb to NULL on successfull set_plane
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 15 Feb 2013 20:21:37 +0000 (21:21 +0100)
committerDave Airlie <airlied@redhat.com>
Tue, 19 Feb 2013 22:47:54 +0000 (08:47 +1000)
We need to clear the local variable to get the refcounting right
(since the reference drm_mode_setplane holds is transferred to the
plane->fb pointer). But should be done _after_ we update the pointer.

Breakage introduced in

commit 6c2a75325c800de286166c693e0cd33c3a1c5ec8
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Tue Dec 11 00:59:24 2012 +0100

    drm: refcounting for sprite framebuffers

Reported-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Rob Clark <rob@ti.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_crtc.c

index f17077307c6513ede7fc401a0742881c7b03d600..e7471b0880b770698fe5734cc07a1919f2ece3e6 100644 (file)
@@ -1996,9 +1996,9 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
                                         plane_req->src_w, plane_req->src_h);
        if (!ret) {
                old_fb = plane->fb;
-               fb = NULL;
                plane->crtc = crtc;
                plane->fb = fb;
+               fb = NULL;
        }
        drm_modeset_unlock_all(dev);