On Thu, Sep 18, 2025 at 11:40:57AM +0300, Jani Nikula wrote:
> i915 and xe do different things on the failure path; i915 calls
> drm_gem_object_put() while xe calls xe_bo_unpin_map_no_vm(). Add a
> helper to enable further refactoring.
> 
> v2: Call drm_gem_object_put() on intel_fbdev_fb_bo_destroy()
> 
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_fbdev_fb.c | 7 ++++++-
>  drivers/gpu/drm/i915/display/intel_fbdev_fb.h | 1 +
>  drivers/gpu/drm/xe/display/intel_fbdev_fb.c   | 7 ++++++-
>  3 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev_fb.c 
> b/drivers/gpu/drm/i915/display/intel_fbdev_fb.c
> index bfd05fd34348..a7dab8cd3aa2 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbdev_fb.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev_fb.c
> @@ -46,6 +46,11 @@ struct drm_gem_object *intel_fbdev_fb_bo_create(struct 
> drm_device *drm, int size
>       return &obj->base;
>  }
>  
> +void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj)
> +{
> +     drm_gem_object_put(obj);
> +}
> +
>  struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm,
>                                              struct drm_mode_fb_cmd2 
> *mode_cmd)
>  {
> @@ -68,7 +73,7 @@ struct intel_framebuffer *intel_fbdev_fb_alloc(struct 
> drm_device *drm,
>                                                         
> mode_cmd->modifier[0]),
>                                     mode_cmd);
>       if (IS_ERR(fb)) {
> -             drm_gem_object_put(obj);
> +             intel_fbdev_fb_bo_destroy(obj);
>               goto err;
>       }
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev_fb.h 
> b/drivers/gpu/drm/i915/display/intel_fbdev_fb.h
> index 6a4ba40d5831..8b6214b0ad0e 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbdev_fb.h
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev_fb.h
> @@ -14,6 +14,7 @@ struct i915_vma;
>  struct intel_display;
>  
>  struct drm_gem_object *intel_fbdev_fb_bo_create(struct drm_device *drm, int 
> size);
> +void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj);
>  struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm,
>                                              struct drm_mode_fb_cmd2 
> *mode_cmd);
>  int intel_fbdev_fb_fill_info(struct intel_display *display, struct fb_info 
> *info,
> diff --git a/drivers/gpu/drm/xe/display/intel_fbdev_fb.c 
> b/drivers/gpu/drm/xe/display/intel_fbdev_fb.c
> index 48225062211c..defbab3df55b 100644
> --- a/drivers/gpu/drm/xe/display/intel_fbdev_fb.c
> +++ b/drivers/gpu/drm/xe/display/intel_fbdev_fb.c
> @@ -49,6 +49,11 @@ struct drm_gem_object *intel_fbdev_fb_bo_create(struct 
> drm_device *drm, int size
>       return &obj->ttm.base;
>  }
>  
> +void intel_fbdev_fb_bo_destroy(struct drm_gem_object *obj)
> +{
> +     xe_bo_unpin_map_no_vm(gem_to_xe_bo(obj));
> +}
> +
>  struct intel_framebuffer *intel_fbdev_fb_alloc(struct drm_device *drm,
>                                              struct drm_mode_fb_cmd2 
> *mode_cmd)
>  {
> @@ -71,7 +76,7 @@ struct intel_framebuffer *intel_fbdev_fb_alloc(struct 
> drm_device *drm,
>                                                         
> mode_cmd->modifier[0]),
>                                     mode_cmd);
>       if (IS_ERR(fb)) {
> -             xe_bo_unpin_map_no_vm(gem_to_xe_bo(obj));
> +             intel_fbdev_fb_bo_destroy(obj);
>               goto err;
>       }
>  
> -- 
> 2.47.3

-- 
Ville Syrjälä
Intel

Reply via email to