On Mon, 2026-03-02 at 20:17 +0200, Jani Nikula wrote:
> The intel_frontbuffer_get() and intel_frontbuffer_put() calls are
> routed
> through intel_frontbuffer.c to i915_gem_object_frontbuffer.c. We
> might
> as well call the functions directly, instead of going through display
> code. This would only get worse with get/put being moved to the
> parent
> interface.
> 
> To make this easier, convert overlay code from struct
> intel_frontbuffer
> to struct i915_frontbuffer, and add a
> i915_gem_object_frontbuffer_track() wrapper for clarity.
> 
> Signed-off-by: Jani Nikula <[email protected]>

Reviewed-by: Jouni Högander <[email protected]>

> ---
>  .../gpu/drm/i915/gem/i915_gem_object_frontbuffer.h   | 10 ++++++++++
>  drivers/gpu/drm/i915/i915_overlay.c                  | 12 ++++++----
> --
>  2 files changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
> b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
> index 1c250ce4ca66..46124048a59f 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
> @@ -45,6 +45,16 @@ struct i915_frontbuffer
> *i915_gem_object_frontbuffer_get(struct drm_i915_gem_obj
>  void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer
> *front);
>  void i915_gem_object_frontbuffer_put(struct i915_frontbuffer
> *front);
>  
> +static inline void i915_gem_object_frontbuffer_track(struct
> i915_frontbuffer *_old,
> +                                                  struct
> i915_frontbuffer *_new,
> +                                                  unsigned int
> frontbuffer_bits)
> +{
> +     struct intel_frontbuffer *old = _old ? &_old->base : NULL;
> +     struct intel_frontbuffer *new = _new ? &_new->base : NULL;
> +
> +     intel_frontbuffer_track(old, new, frontbuffer_bits);
> +}
> +
>  /**
>   * i915_gem_object_frontbuffer_lookup - Look up the object's
> frontbuffer
>   * @obj: The object whose frontbuffer to look up.
> diff --git a/drivers/gpu/drm/i915/i915_overlay.c
> b/drivers/gpu/drm/i915/i915_overlay.c
> index 28518dbb5b8e..f07a07b90b2a 100644
> --- a/drivers/gpu/drm/i915/i915_overlay.c
> +++ b/drivers/gpu/drm/i915/i915_overlay.c
> @@ -30,7 +30,7 @@ struct i915_overlay {
>       struct intel_context *context;
>       struct i915_vma *vma;
>       struct i915_vma *old_vma;
> -     struct intel_frontbuffer *frontbuffer;
> +     struct i915_frontbuffer *frontbuffer;
>       /* register access */
>       struct drm_i915_gem_object *reg_bo;
>       void __iomem *regs;
> @@ -138,18 +138,18 @@ static void i915_overlay_flip_prepare(struct
> i915_overlay *overlay,
>                                     struct i915_vma *vma)
>  {
>       struct drm_i915_private *i915 = overlay->i915;
> -     struct intel_frontbuffer *frontbuffer = NULL;
> +     struct i915_frontbuffer *frontbuffer = NULL;
>  
>       drm_WARN_ON(&i915->drm, overlay->old_vma);
>  
>       if (vma)
> -             frontbuffer =
> intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj));
> +             frontbuffer = i915_gem_object_frontbuffer_get(vma-
> >obj);
>  
> -     intel_frontbuffer_track(overlay->frontbuffer, frontbuffer,
> -                             overlay->frontbuffer_bits);
> +     i915_gem_object_frontbuffer_track(overlay->frontbuffer,
> frontbuffer,
> +                                       overlay-
> >frontbuffer_bits);
>  
>       if (overlay->frontbuffer)
> -             intel_frontbuffer_put(overlay->frontbuffer);
> +             i915_gem_object_frontbuffer_put(overlay-
> >frontbuffer);
>       overlay->frontbuffer = frontbuffer;
>  
>       overlay->old_vma = overlay->vma;

Reply via email to