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;
