@@ -2060,6 +2060,13 @@ int i915_gem_runtime_suspend(struct drm_i915_private *dev_priv)
mutex_lock(&dev_priv->drm.struct_mutex);
+ /*
+ * TODO: Note that currently GuC submission enable/disable will
+ * lead to GuC execbuf client vma allocation/free that
+ * in turn involves RPM get/put hence this path will hang.
+ * Once we update guc_submission_disable to only destroy doorbell
+ * and not free/unmap client vmas, this will be fixed.
+ */
ret = intel_uc_suspend(dev_priv);
if (ret)
goto out_unlock;
@@ -2113,6 +2120,13 @@ void i915_gem_runtime_resume(struct drm_i915_private *dev_priv)
i915_gem_init_swizzling(dev_priv);
i915_gem_restore_fences(dev_priv);
+ /*
+ * TODO: Note that currently GuC submission enable/disable will
+ * lead to GuC execbuf client vma allocation/free that
+ * in turn involves RPM get/put hence this path will hang.
+ * Once we update guc_submission_enable to only acquire doorbell
+ * and not allocate/map client vmas, this will be fixed.
+ */
intel_uc_runtime_resume(dev_priv);
mutex_unlock(&dev_priv->drm.struct_mutex);
During Runtime suspend/resume, GuC is allocating/destroying client vmas that needs RPM reference and it leads to recursion. So RPM suspend/resume will not work currently with GuC enabled. Clarify this TODO through comment in i915_gem_runtime_suspend/resume while invoking uC suspend/resume functions. Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: MichaĆ Winiarski <michal.winiarski@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> --- drivers/gpu/drm/i915/i915_gem.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)