Re: [PATCH] drm/sti: clean up after drm_atomic_helper_shutdown rework

From: Benjamin Gaignard
Date: Tue Oct 16 2018 - 14:30:33 EST


Le lun. 15 oct. 2018 Ã 10:00, Daniel Vetter <daniel@xxxxxxxx> a Ãcrit :
>
> On Fri, Oct 12, 2018 at 11:46:39AM +0200, Benjamin Gaignard wrote:
> > Since drm_atomic_helper_shutdown() rework it is possible to do additional
> > clean up in sti driver: custom plane destroy functions become useless and
> > clean up encoder is no more needed.
> >
> > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx>
> > ---
> > drivers/gpu/drm/sti/sti_cursor.c | 9 +--------
> > drivers/gpu/drm/sti/sti_gdp.c | 9 +--------
> > drivers/gpu/drm/sti/sti_hqvdp.c | 9 +--------
> > drivers/gpu/drm/sti/sti_tvout.c | 24 ------------------------
> > 4 files changed, 3 insertions(+), 48 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/sti/sti_cursor.c b/drivers/gpu/drm/sti/sti_cursor.c
> > index bc908453ffb3..e1ba253055c7 100644
> > --- a/drivers/gpu/drm/sti/sti_cursor.c
> > +++ b/drivers/gpu/drm/sti/sti_cursor.c
> > @@ -328,13 +328,6 @@ static const struct drm_plane_helper_funcs sti_cursor_helpers_funcs = {
> > .atomic_disable = sti_cursor_atomic_disable,
> > };
> >
> > -static void sti_cursor_destroy(struct drm_plane *drm_plane)
> > -{
> > - DRM_DEBUG_DRIVER("\n");
> > -
> > - drm_plane_cleanup(drm_plane);
> > -}
> > -
> > static int sti_cursor_late_register(struct drm_plane *drm_plane)
> > {
> > struct sti_plane *plane = to_sti_plane(drm_plane);
> > @@ -346,7 +339,7 @@ static int sti_cursor_late_register(struct drm_plane *drm_plane)
> > static const struct drm_plane_funcs sti_cursor_plane_helpers_funcs = {
> > .update_plane = drm_atomic_helper_update_plane,
> > .disable_plane = drm_atomic_helper_disable_plane,
> > - .destroy = sti_cursor_destroy,
> > + .destroy = drm_plane_cleanup,
> > .reset = sti_plane_reset,
> > .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
> > .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
> > diff --git a/drivers/gpu/drm/sti/sti_gdp.c b/drivers/gpu/drm/sti/sti_gdp.c
> > index 3c19614d3f75..87b50451afd7 100644
> > --- a/drivers/gpu/drm/sti/sti_gdp.c
> > +++ b/drivers/gpu/drm/sti/sti_gdp.c
> > @@ -879,13 +879,6 @@ static const struct drm_plane_helper_funcs sti_gdp_helpers_funcs = {
> > .atomic_disable = sti_gdp_atomic_disable,
> > };
> >
> > -static void sti_gdp_destroy(struct drm_plane *drm_plane)
> > -{
> > - DRM_DEBUG_DRIVER("\n");
> > -
> > - drm_plane_cleanup(drm_plane);
> > -}
> > -
> > static int sti_gdp_late_register(struct drm_plane *drm_plane)
> > {
> > struct sti_plane *plane = to_sti_plane(drm_plane);
> > @@ -897,7 +890,7 @@ static int sti_gdp_late_register(struct drm_plane *drm_plane)
> > static const struct drm_plane_funcs sti_gdp_plane_helpers_funcs = {
> > .update_plane = drm_atomic_helper_update_plane,
> > .disable_plane = drm_atomic_helper_disable_plane,
> > - .destroy = sti_gdp_destroy,
> > + .destroy = drm_plane_cleanup,
> > .reset = sti_plane_reset,
> > .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
> > .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
> > diff --git a/drivers/gpu/drm/sti/sti_hqvdp.c b/drivers/gpu/drm/sti/sti_hqvdp.c
> > index 23565f52dd71..065a5b08a702 100644
> > --- a/drivers/gpu/drm/sti/sti_hqvdp.c
> > +++ b/drivers/gpu/drm/sti/sti_hqvdp.c
> > @@ -1256,13 +1256,6 @@ static const struct drm_plane_helper_funcs sti_hqvdp_helpers_funcs = {
> > .atomic_disable = sti_hqvdp_atomic_disable,
> > };
> >
> > -static void sti_hqvdp_destroy(struct drm_plane *drm_plane)
> > -{
> > - DRM_DEBUG_DRIVER("\n");
> > -
> > - drm_plane_cleanup(drm_plane);
> > -}
> > -
> > static int sti_hqvdp_late_register(struct drm_plane *drm_plane)
> > {
> > struct sti_plane *plane = to_sti_plane(drm_plane);
> > @@ -1274,7 +1267,7 @@ static int sti_hqvdp_late_register(struct drm_plane *drm_plane)
> > static const struct drm_plane_funcs sti_hqvdp_plane_helpers_funcs = {
> > .update_plane = drm_atomic_helper_update_plane,
> > .disable_plane = drm_atomic_helper_disable_plane,
> > - .destroy = sti_hqvdp_destroy,
> > + .destroy = drm_plane_cleanup,
> > .reset = sti_plane_reset,
> > .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
> > .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
> > diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
> > index ea4a3b87fa55..4dc3b2ec40eb 100644
> > --- a/drivers/gpu/drm/sti/sti_tvout.c
> > +++ b/drivers/gpu/drm/sti/sti_tvout.c
> > @@ -788,21 +788,6 @@ static void sti_tvout_create_encoders(struct drm_device *dev,
> > tvout->dvo = sti_tvout_create_dvo_encoder(dev, tvout);
> > }
> >
> > -static void sti_tvout_destroy_encoders(struct sti_tvout *tvout)
> > -{
> > - if (tvout->hdmi)
> > - drm_encoder_cleanup(tvout->hdmi);
> > - tvout->hdmi = NULL;
> > -
> > - if (tvout->hda)
> > - drm_encoder_cleanup(tvout->hda);
> > - tvout->hda = NULL;
> > -
> > - if (tvout->dvo)
> > - drm_encoder_cleanup(tvout->dvo);
> > - tvout->dvo = NULL;
> > -}
> > -
> > static int sti_tvout_bind(struct device *dev, struct device *master, void *data)
> > {
> > struct sti_tvout *tvout = dev_get_drvdata(dev);
> > @@ -815,17 +800,8 @@ static int sti_tvout_bind(struct device *dev, struct device *master, void *data)
> > return 0;
> > }
> >
> > -static void sti_tvout_unbind(struct device *dev, struct device *master,
> > - void *data)
> > -{
> > - struct sti_tvout *tvout = dev_get_drvdata(dev);
> > -
> > - sti_tvout_destroy_encoders(tvout);
> > -}
> > -
> > static const struct component_ops sti_tvout_ops = {
> > .bind = sti_tvout_bind,
> > - .unbind = sti_tvout_unbind,
>
> Hm, this here looks strange now. I'd put a comment somewhere that
> master_ops->unbind cleans up everything. Either way:
>
> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx>

Hi Daniel,

unbind undo what has been done in bind even the functions aren't symetric:
encoder creation are done is this level of the driver while they
destruction is done
in the top level of the driver by calling drm shutdown function. From
module point of view
bind and unbind are balanced correctly.
I have test it on board :-)

I will not merge this patch until I get a clear review from you.

Regards,
Benjamin
>
> > };
> >
> > static int sti_tvout_probe(struct platform_device *pdev)
> > --
> > 2.15.0
> >
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch