Message ID | 20181012094639.1585-2-benjamin.gaignard@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | drm/sti: clean up after drm_atomic_helper_shutdown rework | expand |
Le lun. 15 oct. 2018 à 10:00, Daniel Vetter <daniel@ffwll.ch> 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@linaro.org> > > --- > > 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@ffwll.ch> 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
On Tue, Oct 16, 2018 at 8:30 PM Benjamin Gaignard <benjamin.gaignard@linaro.org> wrote: > > Le lun. 15 oct. 2018 à 10:00, Daniel Vetter <daniel@ffwll.ch> 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@linaro.org> > > > --- > > > 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@ffwll.ch> > > 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 :-) Yes that's my understanding too, but then I stumbled over this revert (I cc'ed you on it): https://lore.kernel.org/patchwork/patch/1000524/ Now I'm not sure anymore whether my r-b is correct. What happens if only one of the components gets unbound, and not the top level? > I will not merge this patch until I get a clear review from you. You had one, but I just retracted it because of the revert ... -Daniel > > Regards, > Benjamin > > > > > }; > > > > > > static int sti_tvout_probe(struct platform_device *pdev) > > > -- > > > 2.15.0 > > > > > > > -- > > Daniel Vetter > > Software Engineer, Intel Corporation > > http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch
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, }; static int sti_tvout_probe(struct platform_device *pdev)
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@linaro.org> --- 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(-) -- 2.15.0