[PATCH 05/52] drm/mipi_dbi: Use drmm_add_final_kfree in all drivers

Thomas Zimmermann tzimmermann at suse.de
Wed Feb 19 12:45:54 UTC 2020



Am 19.02.20 um 12:47 schrieb Thomas Zimmermann:
> Hi Daniel,
> 
> good idea. I guess it's the simple encoder's fault. :) I only read
> briefly over the whole thing.
> 
> Am 19.02.20 um 11:20 schrieb Daniel Vetter:
>> They all share mipi_dbi_release so we need to switch them all
>> together. With this we can drop the final kfree from the release
>> function.
>>
>> Aside, I think we could perhaps have a tiny additional helper for
>> these mipi_dbi drivers, the first few lines around devm_drm_dev_init
>> are all the same (except for the drm_driver pointer).
>>
>> Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>> Cc: Maxime Ripard <mripard at kernel.org>
>> Cc: Thomas Zimmermann <tzimmermann at suse.de>
>> Cc: David Airlie <airlied at linux.ie>
>> Cc: Daniel Vetter <daniel at ffwll.ch>
>> Cc: Eric Anholt <eric at anholt.net>
>> Cc: David Lechner <david at lechnology.com>
>> Cc: Kamlesh Gurudasani <kamlesh.gurudasani at gmail.com>
>> Cc: "Noralf Trønnes" <noralf at tronnes.org>
>> Cc: Sam Ravnborg <sam at ravnborg.org>
>> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
>> ---
>>  drivers/gpu/drm/drm_mipi_dbi.c  | 3 ---
>>  drivers/gpu/drm/tiny/hx8357d.c  | 2 ++
>>  drivers/gpu/drm/tiny/ili9225.c  | 2 ++
>>  drivers/gpu/drm/tiny/ili9341.c  | 2 ++
>>  drivers/gpu/drm/tiny/ili9486.c  | 2 ++
>>  drivers/gpu/drm/tiny/mi0283qt.c | 2 ++
>>  drivers/gpu/drm/tiny/st7586.c   | 2 ++
>>  drivers/gpu/drm/tiny/st7735r.c  | 2 ++
>>  8 files changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_mipi_dbi.c b/drivers/gpu/drm/drm_mipi_dbi.c
>> index 558baf989f5a..069603dfcd10 100644
>> --- a/drivers/gpu/drm/drm_mipi_dbi.c
>> +++ b/drivers/gpu/drm/drm_mipi_dbi.c
>> @@ -588,13 +588,10 @@ EXPORT_SYMBOL(mipi_dbi_dev_init);
>>   */
>>  void mipi_dbi_release(struct drm_device *drm)
>>  {
>> -	struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(drm);
>> -
>>  	DRM_DEBUG_DRIVER("\n");
>>  
>>  	drm_mode_config_cleanup(drm);
>>  	drm_dev_fini(drm);
>> -	kfree(dbidev);
>>  }
>>  EXPORT_SYMBOL(mipi_dbi_release);
>>  
>> diff --git a/drivers/gpu/drm/tiny/hx8357d.c b/drivers/gpu/drm/tiny/hx8357d.c
>> index 9af8ff84974f..42bc5dadcb1c 100644
>> --- a/drivers/gpu/drm/tiny/hx8357d.c
>> +++ b/drivers/gpu/drm/tiny/hx8357d.c
>> @@ -21,6 +21,7 @@
>>  #include <drm/drm_fb_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_modeset_helper.h>
>>  #include <video/mipi_display.h>
>> @@ -236,6 +237,7 @@ static int hx8357d_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
> 
> I'd prefer something else than drmm_add_final_kfree().
> 
> From what I understand, drmmadd_add_final_kfree() is required so that
> the device instance itself gets free. But wiring up garbage collection
> manually is easy to forget and a somewhat odd design. If we have to do
> that, there's little benefit over calling kfree in the release callback.
> 
> Instead, could drivers rather be converted to drm_dev_alloc() where
> possible?
> 
> For the other cases, could there be a dedicated allocator function that
> invokes drmm_add_final_kfree()? Like that
> 
>   void*
>   __drmm_kzalloc_dev(size_t size, size_t dev_off)
>   {
>       void *parent = kzalloc(size)
> 
>       drm_device *dev = (parent + dev_off)
> 
>       __drmm_add_final_kfree(dev, parent);
> 
>       return parent;
>   }
> 
>   /*
>    * takes the name of driver's device structure and the
>    * name of the drm device structure embedded within
>    */
>   drmm_kzalloc(parent_type, base)
>     (parent_type*)__drm_kzalloc_dev(sizeof(parent_type),
> 			offsetof(parent_type, base));

This is supposed to be a #define statement

> 
> Best regards
> Thomas
> 
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/ili9225.c b/drivers/gpu/drm/tiny/ili9225.c
>> index 802fb8dde1b6..aae88dc5b3f7 100644
>> --- a/drivers/gpu/drm/tiny/ili9225.c
>> +++ b/drivers/gpu/drm/tiny/ili9225.c
>> @@ -24,6 +24,7 @@
>>  #include <drm/drm_fourcc.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_rect.h>
>>  
>> @@ -387,6 +388,7 @@ static int ili9225_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/ili9341.c b/drivers/gpu/drm/tiny/ili9341.c
>> index 33b51dc7faa8..7d40cb4ff72b 100644
>> --- a/drivers/gpu/drm/tiny/ili9341.c
>> +++ b/drivers/gpu/drm/tiny/ili9341.c
>> @@ -20,6 +20,7 @@
>>  #include <drm/drm_fb_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_modeset_helper.h>
>>  #include <video/mipi_display.h>
>> @@ -194,6 +195,7 @@ static int ili9341_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/ili9486.c b/drivers/gpu/drm/tiny/ili9486.c
>> index 5084b38c1a71..7d735fc67498 100644
>> --- a/drivers/gpu/drm/tiny/ili9486.c
>> +++ b/drivers/gpu/drm/tiny/ili9486.c
>> @@ -19,6 +19,7 @@
>>  #include <drm/drm_fb_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_modeset_helper.h>
>>  
>> @@ -208,6 +209,7 @@ static int ili9486_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/mi0283qt.c b/drivers/gpu/drm/tiny/mi0283qt.c
>> index e2cfd9a17143..8555a56bce8c 100644
>> --- a/drivers/gpu/drm/tiny/mi0283qt.c
>> +++ b/drivers/gpu/drm/tiny/mi0283qt.c
>> @@ -18,6 +18,7 @@
>>  #include <drm/drm_fb_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_modeset_helper.h>
>>  #include <video/mipi_display.h>
>> @@ -198,6 +199,7 @@ static int mi0283qt_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/st7586.c b/drivers/gpu/drm/tiny/st7586.c
>> index 9ef559dd3191..427c2561f5f4 100644
>> --- a/drivers/gpu/drm/tiny/st7586.c
>> +++ b/drivers/gpu/drm/tiny/st7586.c
>> @@ -21,6 +21,7 @@
>>  #include <drm/drm_format_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  #include <drm/drm_rect.h>
>>  
>> @@ -328,6 +329,7 @@ static int st7586_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>> diff --git a/drivers/gpu/drm/tiny/st7735r.c b/drivers/gpu/drm/tiny/st7735r.c
>> index 18b925df6e51..b447235c3d47 100644
>> --- a/drivers/gpu/drm/tiny/st7735r.c
>> +++ b/drivers/gpu/drm/tiny/st7735r.c
>> @@ -21,6 +21,7 @@
>>  #include <drm/drm_fb_helper.h>
>>  #include <drm/drm_gem_cma_helper.h>
>>  #include <drm/drm_gem_framebuffer_helper.h>
>> +#include <drm/drm_managed.h>
>>  #include <drm/drm_mipi_dbi.h>
>>  
>>  #define ST7735R_FRMCTR1		0xb1
>> @@ -209,6 +210,7 @@ static int st7735r_probe(struct spi_device *spi)
>>  		kfree(dbidev);
>>  		return ret;
>>  	}
>> +	drmm_add_final_kfree(drm, dbidev);
>>  
>>  	drm_mode_config_init(drm);
>>  
>>
> 
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

-- 
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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20200219/f03c6aaa/attachment.sig>


More information about the dri-devel mailing list