Use devm_add_action_or_reset() instead of devres_alloc() and devres_add(), which works the same. This will simplify the code. There is no functional changes.
Signed-off-by: Tian Tao tiantao6@hisilicon.com Signed-off-by: Yicong Yang yangyicong@hisilicon.com --- drivers/gpu/drm/bridge/panel.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index c916f4b..e5ddefb 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -250,11 +250,9 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_panel_bridge_remove);
-static void devm_drm_panel_bridge_release(struct device *dev, void *res) +static void devm_drm_panel_bridge_release(void *bridge) { - struct drm_bridge **bridge = res; - - drm_panel_bridge_remove(*bridge); + drm_panel_bridge_remove(bridge); }
/** @@ -295,20 +293,17 @@ struct drm_bridge *devm_drm_panel_bridge_add_typed(struct device *dev, struct drm_panel *panel, u32 connector_type) { - struct drm_bridge **ptr, *bridge; - - ptr = devres_alloc(devm_drm_panel_bridge_release, sizeof(*ptr), - GFP_KERNEL); - if (!ptr) - return ERR_PTR(-ENOMEM); + struct drm_bridge *bridge; + int ret;
bridge = drm_panel_bridge_add_typed(panel, connector_type); - if (!IS_ERR(bridge)) { - *ptr = bridge; - devres_add(dev, ptr); - } else { - devres_free(ptr); - } + if (IS_ERR(bridge)) + return bridge; + + ret = devm_add_action_or_reset(dev, devm_drm_panel_bridge_release, + bridge); + if (ret) + return ERR_PTR(ret);
return bridge; }
Hey Tian,
Thanks for having a look at cleanup patches.
On Thu, 8 Apr 2021 at 04:06, Tian Tao tiantao6@hisilicon.com wrote:
Use devm_add_action_or_reset() instead of devres_alloc() and devres_add(), which works the same. This will simplify the code. There is no functional changes.
Signed-off-by: Tian Tao tiantao6@hisilicon.com Signed-off-by: Yicong Yang yangyicong@hisilicon.com
drivers/gpu/drm/bridge/panel.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index c916f4b..e5ddefb 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -250,11 +250,9 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge) } EXPORT_SYMBOL(drm_panel_bridge_remove);
-static void devm_drm_panel_bridge_release(struct device *dev, void *res) +static void devm_drm_panel_bridge_release(void *bridge) {
struct drm_bridge **bridge = res;
drm_panel_bridge_remove(*bridge);
drm_panel_bridge_remove(bridge);
}
/** @@ -295,20 +293,17 @@ struct drm_bridge *devm_drm_panel_bridge_add_typed(struct device *dev, struct drm_panel *panel, u32 connector_type) {
struct drm_bridge **ptr, *bridge;
ptr = devres_alloc(devm_drm_panel_bridge_release, sizeof(*ptr),
GFP_KERNEL);
if (!ptr)
return ERR_PTR(-ENOMEM);
struct drm_bridge *bridge;
int ret; bridge = drm_panel_bridge_add_typed(panel, connector_type);
if (!IS_ERR(bridge)) {
*ptr = bridge;
devres_add(dev, ptr);
} else {
devres_free(ptr);
}
if (IS_ERR(bridge))
return bridge;
ret = devm_add_action_or_reset(dev, devm_drm_panel_bridge_release,
bridge);
if (ret)
return ERR_PTR(ret); return bridge;
}
I'm not crazy about this change. In my mind it is harder to read & understand than the current solution. If anyone else feels otherwise, I'm open to have my mind changed.
Rob.
dri-devel@lists.freedesktop.org