drm/i915/frontbuffer: Mark frontbuffer flush and invalidate with might_sleep()
authorDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Fri, 23 Feb 2018 22:15:16 +0000 (14:15 -0800)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 27 Feb 2018 20:06:07 +0000 (12:06 -0800)
Frontbuffer flush and invalidate call psr, fbc and drrs functions that use
mutexes but they can be called in atomic contexts in the fbdev path. The
point where the spinlocks are acquired is up in the call stack that is not
entirely easy to spot, so annotate with might_sleep().

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180223221520.18464-2-dhinakaran.pandiyan@intel.com
drivers/gpu/drm/i915/intel_frontbuffer.c

index fcfc217e754e754f62c0b15715d19a7fac641139..3a8d3d06c26a6bd0ed8ab5746f215502ea6f985d 100644 (file)
@@ -79,6 +79,7 @@ void __intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
                spin_unlock(&dev_priv->fb_tracking.lock);
        }
 
+       might_sleep();
        intel_psr_invalidate(dev_priv, frontbuffer_bits);
        intel_edp_drrs_invalidate(dev_priv, frontbuffer_bits);
        intel_fbc_invalidate(dev_priv, frontbuffer_bits, origin);
@@ -108,6 +109,7 @@ static void intel_frontbuffer_flush(struct drm_i915_private *dev_priv,
        if (!frontbuffer_bits)
                return;
 
+       might_sleep();
        intel_edp_drrs_flush(dev_priv, frontbuffer_bits);
        intel_psr_flush(dev_priv, frontbuffer_bits, origin);
        intel_fbc_flush(dev_priv, frontbuffer_bits, origin);