Hi everybody, On 2024-08-27 17:25:14+0000, Thomas Weißschuh wrote: > Introduce a device-managed variant of register_framebuffer() which > automatically unregisters the framebuffer on device destruction. > This can simplify the error handling and resource management in drivers. Bert reported that this series broke his framebuffer ([0], [1]). [0] https://lore.kernel.org/lkml/20240829224124.2978-1-spasswolf@xxxxxx/ [1] https://lore.kernel.org/lkml/20240829230438.3226-1-spasswolf@xxxxxx/ > Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> > --- > drivers/video/fbdev/core/fbmem.c | 24 ++++++++++++++++++++++++ > include/linux/fb.h | 1 + > 2 files changed, 25 insertions(+) > > diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c > index 4c4ad0a86a50..d17a2daa2483 100644 > --- a/drivers/video/fbdev/core/fbmem.c > +++ b/drivers/video/fbdev/core/fbmem.c > @@ -544,6 +544,30 @@ unregister_framebuffer(struct fb_info *fb_info) [..] > +/** > + * devm_register_framebuffer - resource-managed frame buffer device registration > + * @dev: device the framebuffer belongs to > + * @fb_info: frame buffer info structure > + * > + * Registers a frame buffer device @fb_info to device @dev. > + * > + * Returns negative errno on error, or zero for success. > + * > + */ > +int > +devm_register_framebuffer(struct device *dev, struct fb_info *fb_info) > +{ > + return devm_add_action_or_reset(dev, devm_unregister_framebuffer, fb_info); > +} > +EXPORT_SYMBOL(devm_register_framebuffer); This implementation is wrong, it never actually registers the framebuffer. It should look like this: int devm_register_framebuffer(struct device *dev, struct fb_info *fb_info) { int ret; ret = register_framebuffer(fb_info); if (ret) return ret; return devm_add_action_or_reset(dev, devm_unregister_framebuffer, fb_info); } EXPORT_SYMBOL(devm_register_framebuffer); Bert, could you test this? Helge, do you want me to resend the series, minus the original patch 1?