From 8f1ddb0251452c9de35a96ac5f7c4f5e87a37266 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Thu, 16 Oct 2025 21:54:06 +0300 Subject: [PATCH] drm/i915/frontbuffer: Add intel_frontbuffer::display MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit After upcoming intel_frontbuffer lifetime related changes we 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. Signed-off-by: Ville Syrjälä Link: https://patch.msgid.link/20251016185408.22735-9-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula --- .../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 e5f3f0d555a80..5d627eac07bdc 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 293c2d0152d66..ff2a6ac75a341 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; -- 2.47.3