From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomi Valkeinen Subject: Re: [PATCH 01/15] drm: omapdrm: Fix plane state free in plane reset handler Date: Wed, 9 Dec 2015 14:43:19 +0200 Message-ID: <566821E7.8030202@ti.com> References: <1449268039-24682-1-git-send-email-laurent.pinchart@ideasonboard.com> <1449268039-24682-2-git-send-email-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1586487447==" Return-path: Received: from arroyo.ext.ti.com (arroyo.ext.ti.com [192.94.94.40]) by gabe.freedesktop.org (Postfix) with ESMTPS id 110426E8E4 for ; Wed, 9 Dec 2015 04:43:27 -0800 (PST) In-Reply-To: <1449268039-24682-2-git-send-email-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org --===============1586487447== Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="7gnbQ9CmcBGCjo54otiWiXEgRdxqWWHAf" --7gnbQ9CmcBGCjo54otiWiXEgRdxqWWHAf Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 05/12/15 00:27, Laurent Pinchart wrote: > 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. >=20 > Signed-off-by: Laurent Pinchart > --- > drivers/gpu/drm/omapdrm/omap_plane.c | 53 ++++++++++++++++++----------= -------- > 1 file changed, 26 insertions(+), 27 deletions(-) >=20 > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/oma= pdrm/omap_plane.c > index 3054bda72688..11d406b160e1 100644 > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > @@ -188,33 +188,6 @@ static const struct drm_plane_helper_funcs omap_pl= ane_helper_funcs =3D { > .atomic_disable =3D omap_plane_atomic_disable, > }; > =20 > -static void omap_plane_reset(struct drm_plane *plane) > -{ > - struct omap_plane *omap_plane =3D 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 =3D NULL; > - > - omap_state =3D kzalloc(sizeof(*omap_state), GFP_KERNEL); > - if (omap_state =3D=3D NULL) > - return; > - > - /* > - * Set defaults depending on whether we are a primary or overlay > - * plane. > - */ > - omap_state->zorder =3D plane->type =3D=3D DRM_PLANE_TYPE_PRIMARY > - ? 0 : omap_plane->id; > - omap_state->base.rotation =3D BIT(DRM_ROTATE_0); > - > - plane->state =3D &omap_state->base; > - plane->state->plane =3D plane; > -} > - > static void omap_plane_destroy(struct drm_plane *plane) > { > struct omap_plane *omap_plane =3D to_omap_plane(plane); > @@ -270,6 +243,32 @@ static void omap_plane_atomic_destroy_state(struct= drm_plane *plane, > kfree(to_omap_plane_state(state)); > } > =20 > +static void omap_plane_reset(struct drm_plane *plane) > +{ > + struct omap_plane *omap_plane =3D to_omap_plane(plane); > + struct omap_plane_state *omap_state; > + > + if (plane->state) { > + omap_plane_atomic_destroy_state(plane, plane->state); > + plane->state =3D NULL; > + } > + > + omap_state =3D kzalloc(sizeof(*omap_state), GFP_KERNEL); > + if (omap_state =3D=3D NULL) > + return; > + > + /* > + * Set defaults depending on whether we are a primary or overlay > + * plane. > + */ > + omap_state->zorder =3D plane->type =3D=3D DRM_PLANE_TYPE_PRIMARY > + ? 0 : omap_plane->id; > + omap_state->base.rotation =3D BIT(DRM_ROTATE_0); > + > + plane->state =3D &omap_state->base; > + plane->state->plane =3D plane; > +} > + > static int omap_plane_atomic_set_property(struct drm_plane *plane, > struct drm_plane_state *state, > struct drm_property *property, >=20 This one moves the function, so it's pretty hard to see what actually was changed. Tomi --7gnbQ9CmcBGCjo54otiWiXEgRdxqWWHAf Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJWaCHoAAoJEPo9qoy8lh71i0AQAJxWdiLhCyx7AeaMYMWMYzOi PmkozTfV4d3WA3HuhUhY7DcyG7MSvfxJJZMzinCml+wV0wbJMPaPE1EAh21uYG10 kfr8/KJ6XcRrVDUNiSD87APFNzKAWVs9RTKA3q5WSSrDJy+ACO2sQvsA7KVA+Yoz e3//BE1AQrQv0jtjwTd6KI/JdCBNWsaeEcm1ValWMuwVPZASjl7I9evLN59xthRB o7llS4kRiwEhgcviM2TkJRHde/9NNHaDyRc2EEF6WmABNdJmtwo1cUxUuVHDNiyf 9J5BPzMzIw7qcKW/9mI6QIOhMdQcsyaLFe0Ypk8uHNGeq0FgNK+i1omdVgSx8zPa HagtFwydNXHWCuwCFAOUasS+GqtyjUqTJQVLgBCFMYldMVexELTlrGB4ClvEx48J oYYhTHo97YpqqV9sjiJt8VmbLTzQuGwz4ittcoKn4k/7ng68ne+7tg5RL0CeKZcd KRrS7JYJdSZ3t67sdIGN3mqElYEMfqH0ds587Gwv4aE3iDK48LULiJ51i12cajtX F3CjeFMnAAYxwLPV3DYwwZRzbOUXB4/44rnKqrIV1dwywK7KqWcTTZIX8nLFxIaW MgRprBdKK+r7eI3V34WWH1hLRReniwGzkXldSHSvzNzbxobQwCQUV7ql78dRS5B7 zDXoMr0rtWkEm38k5CUz =lZ6Z -----END PGP SIGNATURE----- --7gnbQ9CmcBGCjo54otiWiXEgRdxqWWHAf-- --===============1586487447== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK --===============1586487447==--