Merge tag 'drm-intel-gt-next-2021-05-28' of git://anongit.freedesktop.org/drm/drm...
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / i915 / display / intel_frontbuffer.c
index 7b38eee..8e75deb 100644 (file)
@@ -58,6 +58,7 @@
 #include "display/intel_dp.h"
 
 #include "i915_drv.h"
+#include "i915_trace.h"
 #include "intel_display_types.h"
 #include "intel_fbc.h"
 #include "intel_frontbuffer.h"
@@ -87,6 +88,8 @@ static void frontbuffer_flush(struct drm_i915_private *i915,
        if (!frontbuffer_bits)
                return;
 
+       trace_intel_frontbuffer_flush(frontbuffer_bits, origin);
+
        might_sleep();
        intel_edp_drrs_flush(i915, frontbuffer_bits);
        intel_psr_flush(i915, frontbuffer_bits, origin);
@@ -173,6 +176,8 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front,
                spin_unlock(&i915->fb_tracking.lock);
        }
 
+       trace_intel_frontbuffer_invalidate(frontbuffer_bits, origin);
+
        might_sleep();
        intel_psr_invalidate(i915, frontbuffer_bits, origin);
        intel_edp_drrs_invalidate(i915, frontbuffer_bits);
@@ -206,7 +211,6 @@ static int frontbuffer_active(struct i915_active *ref)
        return 0;
 }
 
-__i915_active_call
 static void frontbuffer_retire(struct i915_active *ref)
 {
        struct intel_frontbuffer *front =
@@ -224,6 +228,8 @@ static void frontbuffer_release(struct kref *ref)
        struct drm_i915_gem_object *obj = front->obj;
        struct i915_vma *vma;
 
+       drm_WARN_ON(obj->base.dev, atomic_read(&front->bits));
+
        spin_lock(&obj->vma.lock);
        for_each_ggtt_vma(vma, obj) {
                i915_vma_clear_scanout(vma);
@@ -259,7 +265,8 @@ intel_frontbuffer_get(struct drm_i915_gem_object *obj)
        atomic_set(&front->bits, 0);
        i915_active_init(&front->write,
                         frontbuffer_active,
-                        i915_active_may_sleep(frontbuffer_retire));
+                        frontbuffer_retire,
+                        I915_ACTIVE_RETIRE_SLEEPS);
 
        spin_lock(&i915->fb_tracking.lock);
        if (rcu_access_pointer(obj->frontbuffer)) {