drm/i915: move fb_tracking under display sub-struct
authorJani Nikula <jani.nikula@intel.com>
Mon, 29 Aug 2022 13:18:18 +0000 (16:18 +0300)
committerJani Nikula <jani.nikula@intel.com>
Wed, 31 Aug 2022 14:21:29 +0000 (17:21 +0300)
Move display frontbuffer tracking related members under drm_i915_private
display sub-struct.

Rename struct i915_frontbuffer_tracking to intel_frontbuffer_tracking
while at it.

FIXME: fb_tracking.lock mutex init should be moved away from
i915_gem_init_early().

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/a5444d0a373afca46da9a2f6e4db442af21b429b.1661779055.git.jani.nikula@intel.com
drivers/gpu/drm/i915/display/intel_display_core.h
drivers/gpu/drm/i915/display/intel_display_debugfs.c
drivers/gpu/drm/i915/display/intel_frontbuffer.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c

index 0aeebf1..3d2e1b1 100644 (file)
@@ -120,6 +120,17 @@ struct intel_dpll {
        } ref_clks;
 };
 
+struct intel_frontbuffer_tracking {
+       spinlock_t lock;
+
+       /*
+        * Tracking bits for delayed frontbuffer flushing du to gpu activity or
+        * scheduled flips.
+        */
+       unsigned busy_bits;
+       unsigned flip_bits;
+};
+
 struct intel_hotplug {
        struct delayed_work hotplug_work;
 
@@ -363,6 +374,7 @@ struct intel_display {
        struct intel_dmc dmc;
        struct intel_dpll dpll;
        struct intel_fbc *fbc[I915_MAX_FBCS];
+       struct intel_frontbuffer_tracking fb_tracking;
        struct intel_hotplug hotplug;
        struct intel_opregion opregion;
        struct intel_overlay *overlay;
index 619523f..5dc364e 100644 (file)
@@ -37,10 +37,10 @@ static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 
        seq_printf(m, "FB tracking busy bits: 0x%08x\n",
-                  dev_priv->fb_tracking.busy_bits);
+                  dev_priv->display.fb_tracking.busy_bits);
 
        seq_printf(m, "FB tracking flip bits: 0x%08x\n",
-                  dev_priv->fb_tracking.flip_bits);
+                  dev_priv->display.fb_tracking.flip_bits);
 
        return 0;
 }
index 1463493..d80e3e8 100644 (file)
@@ -81,9 +81,9 @@ static void frontbuffer_flush(struct drm_i915_private *i915,
                              enum fb_op_origin origin)
 {
        /* Delay flushing when rings are still busy.*/
-       spin_lock(&i915->fb_tracking.lock);
-       frontbuffer_bits &= ~i915->fb_tracking.busy_bits;
-       spin_unlock(&i915->fb_tracking.lock);
+       spin_lock(&i915->display.fb_tracking.lock);
+       frontbuffer_bits &= ~i915->display.fb_tracking.busy_bits;
+       spin_unlock(&i915->display.fb_tracking.lock);
 
        if (!frontbuffer_bits)
                return;
@@ -111,11 +111,11 @@ static void frontbuffer_flush(struct drm_i915_private *i915,
 void intel_frontbuffer_flip_prepare(struct drm_i915_private *i915,
                                    unsigned frontbuffer_bits)
 {
-       spin_lock(&i915->fb_tracking.lock);
-       i915->fb_tracking.flip_bits |= frontbuffer_bits;
+       spin_lock(&i915->display.fb_tracking.lock);
+       i915->display.fb_tracking.flip_bits |= frontbuffer_bits;
        /* Remove stale busy bits due to the old buffer. */
-       i915->fb_tracking.busy_bits &= ~frontbuffer_bits;
-       spin_unlock(&i915->fb_tracking.lock);
+       i915->display.fb_tracking.busy_bits &= ~frontbuffer_bits;
+       spin_unlock(&i915->display.fb_tracking.lock);
 }
 
 /**
@@ -131,11 +131,11 @@ void intel_frontbuffer_flip_prepare(struct drm_i915_private *i915,
 void intel_frontbuffer_flip_complete(struct drm_i915_private *i915,
                                     unsigned frontbuffer_bits)
 {
-       spin_lock(&i915->fb_tracking.lock);
+       spin_lock(&i915->display.fb_tracking.lock);
        /* Mask any cancelled flips. */
-       frontbuffer_bits &= i915->fb_tracking.flip_bits;
-       i915->fb_tracking.flip_bits &= ~frontbuffer_bits;
-       spin_unlock(&i915->fb_tracking.lock);
+       frontbuffer_bits &= i915->display.fb_tracking.flip_bits;
+       i915->display.fb_tracking.flip_bits &= ~frontbuffer_bits;
+       spin_unlock(&i915->display.fb_tracking.lock);
 
        if (frontbuffer_bits)
                frontbuffer_flush(i915, frontbuffer_bits, ORIGIN_FLIP);
@@ -155,10 +155,10 @@ void intel_frontbuffer_flip_complete(struct drm_i915_private *i915,
 void intel_frontbuffer_flip(struct drm_i915_private *i915,
                            unsigned frontbuffer_bits)
 {
-       spin_lock(&i915->fb_tracking.lock);
+       spin_lock(&i915->display.fb_tracking.lock);
        /* Remove stale busy bits due to the old buffer. */
-       i915->fb_tracking.busy_bits &= ~frontbuffer_bits;
-       spin_unlock(&i915->fb_tracking.lock);
+       i915->display.fb_tracking.busy_bits &= ~frontbuffer_bits;
+       spin_unlock(&i915->display.fb_tracking.lock);
 
        frontbuffer_flush(i915, frontbuffer_bits, ORIGIN_FLIP);
 }
@@ -170,10 +170,10 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front,
        struct drm_i915_private *i915 = to_i915(front->obj->base.dev);
 
        if (origin == ORIGIN_CS) {
-               spin_lock(&i915->fb_tracking.lock);
-               i915->fb_tracking.busy_bits |= frontbuffer_bits;
-               i915->fb_tracking.flip_bits &= ~frontbuffer_bits;
-               spin_unlock(&i915->fb_tracking.lock);
+               spin_lock(&i915->display.fb_tracking.lock);
+               i915->display.fb_tracking.busy_bits |= frontbuffer_bits;
+               i915->display.fb_tracking.flip_bits &= ~frontbuffer_bits;
+               spin_unlock(&i915->display.fb_tracking.lock);
        }
 
        trace_intel_frontbuffer_invalidate(frontbuffer_bits, origin);
@@ -191,11 +191,11 @@ void __intel_fb_flush(struct intel_frontbuffer *front,
        struct drm_i915_private *i915 = to_i915(front->obj->base.dev);
 
        if (origin == ORIGIN_CS) {
-               spin_lock(&i915->fb_tracking.lock);
+               spin_lock(&i915->display.fb_tracking.lock);
                /* Filter out new bits since rendering started. */
-               frontbuffer_bits &= i915->fb_tracking.busy_bits;
-               i915->fb_tracking.busy_bits &= ~frontbuffer_bits;
-               spin_unlock(&i915->fb_tracking.lock);
+               frontbuffer_bits &= i915->display.fb_tracking.busy_bits;
+               i915->display.fb_tracking.busy_bits &= ~frontbuffer_bits;
+               spin_unlock(&i915->display.fb_tracking.lock);
        }
 
        if (frontbuffer_bits)
@@ -221,7 +221,7 @@ static void frontbuffer_retire(struct i915_active *ref)
 }
 
 static void frontbuffer_release(struct kref *ref)
-       __releases(&to_i915(front->obj->base.dev)->fb_tracking.lock)
+       __releases(&to_i915(front->obj->base.dev)->display.fb_tracking.lock)
 {
        struct intel_frontbuffer *front =
                container_of(ref, typeof(*front), ref);
@@ -238,7 +238,7 @@ static void frontbuffer_release(struct kref *ref)
        spin_unlock(&obj->vma.lock);
 
        RCU_INIT_POINTER(obj->frontbuffer, NULL);
-       spin_unlock(&to_i915(obj->base.dev)->fb_tracking.lock);
+       spin_unlock(&to_i915(obj->base.dev)->display.fb_tracking.lock);
 
        i915_active_fini(&front->write);
 
@@ -268,7 +268,7 @@ intel_frontbuffer_get(struct drm_i915_gem_object *obj)
                         frontbuffer_retire,
                         I915_ACTIVE_RETIRE_SLEEPS);
 
-       spin_lock(&i915->fb_tracking.lock);
+       spin_lock(&i915->display.fb_tracking.lock);
        if (rcu_access_pointer(obj->frontbuffer)) {
                kfree(front);
                front = rcu_dereference_protected(obj->frontbuffer, true);
@@ -277,7 +277,7 @@ intel_frontbuffer_get(struct drm_i915_gem_object *obj)
                i915_gem_object_get(obj);
                rcu_assign_pointer(obj->frontbuffer, front);
        }
-       spin_unlock(&i915->fb_tracking.lock);
+       spin_unlock(&i915->display.fb_tracking.lock);
 
        return front;
 }
@@ -286,7 +286,7 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front)
 {
        kref_put_lock(&front->ref,
                      frontbuffer_release,
-                     &to_i915(front->obj->base.dev)->fb_tracking.lock);
+                     &to_i915(front->obj->base.dev)->display.fb_tracking.lock);
 }
 
 /**
index a03b8e6..c950867 100644 (file)
@@ -39,7 +39,6 @@
 #include "display/intel_display.h"
 #include "display/intel_display_core.h"
 #include "display/intel_dsb.h"
-#include "display/intel_frontbuffer.h"
 
 #include "gem/i915_gem_context_types.h"
 #include "gem/i915_gem_lmem.h"
@@ -188,17 +187,6 @@ i915_fence_timeout(const struct drm_i915_private *i915)
 
 #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915))
 
-struct i915_frontbuffer_tracking {
-       spinlock_t lock;
-
-       /*
-        * Tracking bits for delayed frontbuffer flushing du to gpu activity or
-        * scheduled flips.
-        */
-       unsigned busy_bits;
-       unsigned flip_bits;
-};
-
 struct i915_virtual_gpu {
        struct mutex lock; /* serialises sending of g2v_notify command pkts */
        bool active;
@@ -333,8 +321,6 @@ struct drm_i915_private {
 
        struct list_head global_obj_list;
 
-       struct i915_frontbuffer_tracking fb_tracking;
-
        struct intel_atomic_helper {
                struct llist_head free_list;
                struct work_struct free_work;
index 32f0b5c..c2d6172 100644 (file)
@@ -1212,7 +1212,7 @@ void i915_gem_init_early(struct drm_i915_private *dev_priv)
        i915_gem_init__mm(dev_priv);
        i915_gem_init__contexts(dev_priv);
 
-       spin_lock_init(&dev_priv->fb_tracking.lock);
+       spin_lock_init(&dev_priv->display.fb_tracking.lock);
 }
 
 void i915_gem_cleanup_early(struct drm_i915_private *dev_priv)