]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/frontbuffer: Add intel_frontbuffer::display
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 16 Oct 2025 18:54:06 +0000 (21:54 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 7 Nov 2025 15:38:28 +0000 (17:38 +0200)
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ä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251016185408.22735-9-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_frontbuffer.c
drivers/gpu/drm/i915/display/intel_frontbuffer.h

index e5f3f0d555a80718d9042d63e04f05c3e6247786..5d627eac07bdcffda555ce1761f3ef6779fca8a9 100644 (file)
@@ -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);
        }
index 293c2d0152d66ac6f6eb6bbecfe7d235793d616c..ff2a6ac75a341fcc07c2405ba9bdb6d0b31e809a 100644 (file)
@@ -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;