Am 02.03.20 um 23:26 schrieb Daniel Vetter: > We need to add a drmm_kstrdup for this, but let's start somewhere. > > This is not exactly perfect onion unwinding, but it's jsut a kfree so > doesn't really matter at all. > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> Acked-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- > drivers/gpu/drm/drm_drv.c | 5 ++--- > drivers/gpu/drm/drm_managed.c | 16 ++++++++++++++++ > include/drm/drm_managed.h | 1 + > 3 files changed, 19 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index 1a048325f30e..ef79c03e311c 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -777,7 +777,6 @@ void drm_dev_fini(struct drm_device *dev) > mutex_destroy(&dev->filelist_mutex); > mutex_destroy(&dev->struct_mutex); > drm_legacy_destroy_members(dev); > - kfree(dev->unique); > } > EXPORT_SYMBOL(drm_dev_fini); > > @@ -1068,8 +1067,8 @@ EXPORT_SYMBOL(drm_dev_unregister); > */ > int drm_dev_set_unique(struct drm_device *dev, const char *name) > { > - kfree(dev->unique); > - dev->unique = kstrdup(name, GFP_KERNEL); > + drmm_kfree(dev, dev->unique); > + dev->unique = drmm_kstrdup(dev, name, GFP_KERNEL); > > return dev->unique ? 0 : -ENOMEM; > } > diff --git a/drivers/gpu/drm/drm_managed.c b/drivers/gpu/drm/drm_managed.c > index 57dc79fa90af..514d5bd42446 100644 > --- a/drivers/gpu/drm/drm_managed.c > +++ b/drivers/gpu/drm/drm_managed.c > @@ -160,6 +160,22 @@ void *drmm_kmalloc(struct drm_device *dev, size_t size, gfp_t gfp) > } > EXPORT_SYMBOL(drmm_kmalloc); > > +char *drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp) > +{ > + size_t size; > + char *buf; > + > + if (!s) > + return NULL; > + > + size = strlen(s) + 1; > + buf = drmm_kmalloc(dev, size, gfp); > + if (buf) > + memcpy(buf, s, size); > + return buf; > +} > +EXPORT_SYMBOL_GPL(drmm_kstrdup); > + > void drmm_kfree(struct drm_device *dev, void *data) > { > struct drmres *dr_match = NULL, *dr; > diff --git a/include/drm/drm_managed.h b/include/drm/drm_managed.h > index 7b5df7d09b19..89e6fce9f689 100644 > --- a/include/drm/drm_managed.h > +++ b/include/drm/drm_managed.h > @@ -24,6 +24,7 @@ static inline void *drmm_kzalloc(struct drm_device *dev, size_t size, gfp_t gfp) > { > return drmm_kmalloc(dev, size, gfp | __GFP_ZERO); > } > +char *drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp); > > void drmm_kfree(struct drm_device *dev, void *data); > > -- 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
Attachment:
signature.asc
Description: OpenPGP digital signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel