drm: omapdrm: Fix plane state free in plane reset handler
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 14 Dec 2015 20:39:29 +0000 (22:39 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 31 Dec 2015 09:25:42 +0000 (11:25 +0200)
The plane reset handler frees the plane state and allocates a new
default state, but when doing so attempt to free the plane state using
the base plane state pointer instead of casting it to the
driver-specific state object that has been allocated. Fix it by using
the omap_plane_atomic_destroy_state() function to destroy the plane
state instead of duplicating the code.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
[tomi.valkeinen@ti.com: move of the func into separate patch]
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/omap_plane.c

index c3f637491a63428b7dcd47d789a1791b25a8b74f..d75b197eff466b278fad743fbc8ac881a74ca16a 100644 (file)
@@ -248,11 +248,10 @@ static void omap_plane_reset(struct drm_plane *plane)
        struct omap_plane *omap_plane = to_omap_plane(plane);
        struct omap_plane_state *omap_state;
 
-       if (plane->state && plane->state->fb)
-               drm_framebuffer_unreference(plane->state->fb);
-
-       kfree(plane->state);
-       plane->state = NULL;
+       if (plane->state) {
+               omap_plane_atomic_destroy_state(plane, plane->state);
+               plane->state = NULL;
+       }
 
        omap_state = kzalloc(sizeof(*omap_state), GFP_KERNEL);
        if (omap_state == NULL)