On Fri, Mar 14, 2025 at 11:31:18AM +0100, Luca Ceresoli wrote: > Many functions get a drm_bridge pointer, only use it in the function body > (or a smaller scope such as a loop body), and don't store it. In these > cases they always need to drm_bridge_put() it before returning (or exiting > the scope). > > Some of those functions have complex code paths with multiple return points > or loop break/continue. This makes adding drm_bridge_put() in the right > places tricky, ugly and error prone in case of future code changes. > > Others use the bridge pointer in the return statement and would need to > split the return line to fit the drm_bridge_put, which is a bit annoying: > > -return some_thing(bridge); > +ret = some_thing(bridge); > +drm_bridge_put(bridge); > +return ret; > > To make it easier for all of them to put the bridge reference correctly > without complicating code, define a scope-based cleanup action to be used > with __free(). > > Signed-off-by: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx> > > --- > > This patch was added in v7. > --- > include/drm/drm_bridge.h | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 5c1e2b9cafb12eb429d1f5d3ef312e6cf9b54f47..a5accd64c364ebb57903ae1e7459034ad9ebf4f3 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -23,6 +23,7 @@ > #ifndef __DRM_BRIDGE_H__ > #define __DRM_BRIDGE_H__ > > +#include <linux/cleanup.h> > #include <linux/ctype.h> > #include <linux/list.h> > #include <linux/mutex.h> > @@ -995,6 +996,9 @@ static inline struct drm_bridge *drm_bridge_put(struct drm_bridge *bridge) > return bridge; > } > > +/* Cleanup action for use with __free() */ > +DEFINE_FREE(drm_bridge_put, struct drm_bridge *, if (_T) drm_bridge_put(_T)) > + IIRC, drm_bridge_put already checks for the pointer being null before dereferencing it, right? Then we can probably simplify the macro here. Either way, Reviewed-by: Maxime Ripard <mripard@xxxxxxxxxx> Maxime
Attachment:
signature.asc
Description: PGP signature