Am 02.03.20 um 23:25 schrieb Daniel Vetter: > With this we can drop the final kfree from the release function. > > v2: We need drm_dev_put to unroll the driver creation (once > drm_dev_init and drmm_add_final_kfree suceeded), otherwise > the drmm_ magic doesn't happen. > > v3: Actually squash in the fixup (Laurent). > > Acked-by: Sam Ravnborg > Signed-off-by: Daniel Vetter Acked-by: Thomas Zimmermann > Cc: Laurent Pinchart > Cc: Dave Airlie > Cc: Sean Paul > Cc: Thomas Zimmermann > Cc: Emil Velikov > Cc: Daniel Vetter > Cc: "Noralf Trønnes" > Cc: Thomas Gleixner > Cc: Sam Ravnborg > --- > drivers/gpu/drm/udl/udl_drv.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c > index e6c1cd77d4d4..6a5594946096 100644 > --- a/drivers/gpu/drm/udl/udl_drv.c > +++ b/drivers/gpu/drm/udl/udl_drv.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -38,7 +39,6 @@ static void udl_driver_release(struct drm_device *dev) > udl_fini(dev); > udl_modeset_cleanup(dev); > drm_dev_fini(dev); > - kfree(dev); > } > > static struct drm_driver driver = { > @@ -77,11 +77,11 @@ static struct udl_device *udl_driver_create(struct usb_interface *interface) > > udl->udev = udev; > udl->drm.dev_private = udl; > + drmm_add_final_kfree(&udl->drm, udl); > > r = udl_init(udl); > if (r) { > - drm_dev_fini(&udl->drm); > - kfree(udl); > + drm_dev_put(&udl->drm); > return ERR_PTR(r); > } > > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 Nürnberg, Germany (HRB 36809, AG Nürnberg) Geschäftsführer: Felix Imendörffer