[v2,3/8] drm/fb-helper: Export drm_fb_helper_release_info()

Sui jingfeng suijingfeng at loongson.cn
Tue Mar 21 16:34:30 UTC 2023


Tested-by: Sui Jingfeng<suijingfeng at loongson.cn>

On 2023/3/20 23:07, Thomas Zimmermann wrote:
> Export the fb_info release code as drm_fb_helper_release_info(). Will
> help with cleaning up failed fbdev probing.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>
> Acked-by: Zack Rusin <zackr at vmware.com>
> ---
>   drivers/gpu/drm/drm_fb_helper.c | 33 ++++++++++++++++++++++++---------
>   include/drm/drm_fb_helper.h     |  5 +++++
>   2 files changed, 29 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index a39998047f8a..7e96ed9efdb5 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -538,6 +538,29 @@ struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper)
>   }
>   EXPORT_SYMBOL(drm_fb_helper_alloc_info);
>   
> +/**
> + * drm_fb_helper_release_info - release fb_info and its members
> + * @fb_helper: driver-allocated fbdev helper
> + *
> + * A helper to release fb_info and the member cmap.  Drivers do not
> + * need to release the allocated fb_info structure themselves, this is
> + * automatically done when calling drm_fb_helper_fini().
> + */
> +void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper)
> +{
> +	struct fb_info *info = fb_helper->info;
> +
> +	if (!info)
> +		return;
> +
> +	fb_helper->info = NULL;
> +
> +	if (info->cmap.len)
> +		fb_dealloc_cmap(&info->cmap);
> +	framebuffer_release(info);
> +}
> +EXPORT_SYMBOL(drm_fb_helper_release_info);
> +
>   /**
>    * drm_fb_helper_unregister_info - unregister fb_info framebuffer device
>    * @fb_helper: driver-allocated fbdev helper, can be NULL
> @@ -561,8 +584,6 @@ EXPORT_SYMBOL(drm_fb_helper_unregister_info);
>    */
>   void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
>   {
> -	struct fb_info *info;
> -
>   	if (!fb_helper)
>   		return;
>   
> @@ -574,13 +595,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
>   	cancel_work_sync(&fb_helper->resume_work);
>   	cancel_work_sync(&fb_helper->damage_work);
>   
> -	info = fb_helper->info;
> -	if (info) {
> -		if (info->cmap.len)
> -			fb_dealloc_cmap(&info->cmap);
> -		framebuffer_release(info);
> -	}
> -	fb_helper->info = NULL;
> +	drm_fb_helper_release_info(fb_helper);
>   
>   	mutex_lock(&kernel_fb_helper_lock);
>   	if (!list_empty(&fb_helper->kernel_fb_list)) {
> diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
> index 013654de3fc5..c5822ec2fdd1 100644
> --- a/include/drm/drm_fb_helper.h
> +++ b/include/drm/drm_fb_helper.h
> @@ -256,6 +256,7 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
>   int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
>   
>   struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper);
> +void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper);
>   void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper);
>   void drm_fb_helper_fill_info(struct fb_info *info,
>   			     struct drm_fb_helper *fb_helper,
> @@ -365,6 +366,10 @@ drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper)
>   	return NULL;
>   }
>   
> +static inline void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper)
> +{
> +}
> +
>   static inline void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper)
>   {
>   }



More information about the dri-devel mailing list