On Thu, 16 Oct 2025, Ville Syrjala <[email protected]> wrote: > From: Ville Syrjälä <[email protected]> > > After upcoming intel_frontbuffer lifetime related changed we
*changes I believe, and sorry for noticing these just after hitting send *facepalm*. > won't need intel_frontbuffer::obj for anything apart from > getting at the display. Add a direct pointer for that instead > so that the obj pointer can be completely eliminated. > > Acked-by: Jani Nikula <[email protected]> > Signed-off-by: Ville Syrjälä <[email protected]> > --- > .../gpu/drm/i915/display/intel_frontbuffer.c | 19 ++++++++----------- > .../gpu/drm/i915/display/intel_frontbuffer.h | 1 + > 2 files changed, 9 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > index e5f3f0d555a8..5d627eac07bd 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c > @@ -128,7 +128,7 @@ void __intel_fb_invalidate(struct intel_frontbuffer > *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_CS) { > spin_lock(&display->fb_tracking.lock); > @@ -148,7 +148,7 @@ void __intel_fb_flush(struct intel_frontbuffer *front, > enum fb_op_origin origin, > unsigned int frontbuffer_bits) > { > - struct intel_display *display = to_intel_display(front->obj->dev); > + struct intel_display *display = front->display; > > if (origin == ORIGIN_DIRTYFB) > intel_bo_frontbuffer_flush_for_display(front); > @@ -215,12 +215,12 @@ static void frontbuffer_retire(struct i915_active *ref) > } > > static void frontbuffer_release(struct kref *ref) > - > __releases(&to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock) > + __releases(&front->display->fb_tracking.frontbuffer_lock) > { > struct intel_frontbuffer *ret, *front = > container_of(ref, typeof(*front), ref); > + struct intel_display *display = front->display; > struct drm_gem_object *obj = front->obj; > - struct intel_display *display = to_intel_display(obj->dev); > > drm_WARN_ON(display->drm, atomic_read(&front->bits)); > > @@ -253,6 +253,7 @@ intel_frontbuffer_get(struct drm_gem_object *obj) > drm_gem_object_get(obj); > > front->obj = obj; > + front->display = display; > kref_init(&front->ref); > atomic_set(&front->bits, 0); > i915_active_init(&front->write, > @@ -277,7 +278,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer > *front) > { > kref_put_lock(&front->ref, > frontbuffer_release, > - > &to_intel_display(front->obj->dev)->fb_tracking.frontbuffer_lock); > + &front->display->fb_tracking.frontbuffer_lock); > } > > /** > @@ -306,17 +307,13 @@ void intel_frontbuffer_track(struct intel_frontbuffer > *old, > BUILD_BUG_ON(I915_MAX_PLANES > INTEL_FRONTBUFFER_BITS_PER_PIPE); > > if (old) { > - struct intel_display *display = to_intel_display(old->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(old->display->drm, > !(atomic_read(&old->bits) & frontbuffer_bits)); > atomic_andnot(frontbuffer_bits, &old->bits); > } > > if (new) { > - struct intel_display *display = to_intel_display(new->obj->dev); > - > - drm_WARN_ON(display->drm, > + drm_WARN_ON(new->display->drm, > atomic_read(&new->bits) & frontbuffer_bits); > atomic_or(frontbuffer_bits, &new->bits); > } > diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > index 293c2d0152d6..ff2a6ac75a34 100644 > --- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h > +++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h > @@ -43,6 +43,7 @@ enum fb_op_origin { > > struct intel_frontbuffer { > struct kref ref; > + struct intel_display *display; > atomic_t bits; > struct i915_active write; > struct drm_gem_object *obj; -- Jani Nikula, Intel
