From: Tvrtko Ursulin <[email protected]>

Looks like intel_guc_reset had the ability to sleep under the
uncore spinlock since forever but it wasn't detected until the
recent changes annotated the wait for register with might_sleep.

I have fixed it by removing holding of the uncore spinlock over
the call to gen6_hw_domain_reset, since I do not see that is
really needed. But there is always a possibility I am missing
some nasty detail so please double check.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Cc: Chris Wilson <[email protected]>
Cc: Michal Wajdeczko <[email protected]>
Cc: Arkadiusz Hiler <[email protected]>
Cc: Joonas Lahtinen <[email protected]>
Cc: Oscar Mateo <[email protected]>
--
A random selection of Cc for people who I though were recently
engaged in GuC code.
---
 drivers/gpu/drm/i915/intel_uncore.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_uncore.c 
b/drivers/gpu/drm/i915/intel_uncore.c
index 0cd56bf00650..a10d8863b0a9 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -1532,7 +1532,7 @@ static int gen6_hw_domain_reset(struct drm_i915_private 
*dev_priv,
         */
        __raw_i915_write32(dev_priv, GEN6_GDRST, hw_domain_mask);
 
-       /* Spin waiting for the device to ack the reset requests */
+       /* Wait for the device to ack the reset requests */
        return intel_wait_for_register_fw(dev_priv,
                                          GEN6_GDRST, hw_domain_mask, 0,
                                          500);
@@ -1779,17 +1779,12 @@ bool intel_has_gpu_reset(struct drm_i915_private 
*dev_priv)
 int intel_guc_reset(struct drm_i915_private *dev_priv)
 {
        int ret;
-       unsigned long irqflags;
 
        if (!HAS_GUC(dev_priv))
                return -EINVAL;
 
        intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
-       spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
-
        ret = gen6_hw_domain_reset(dev_priv, GEN9_GRDOM_GUC);
-
-       spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
        intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
 
        return ret;
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to