[PATCH] drm/i915: Add additional power well get/put logs

Vanshidhar Konda vanshidhar.r.konda at intel.com
Sat Mar 2 21:22:42 UTC 2019


For FDO 108800 it seems like the reference count on the display
power-well is non-zero at the time the other power-wells for
display domain are turned off. The kernel doesn't invoke runtime
suspend call on the Intel GFX device due to non-zero ref count.

This patch adds additional logging for ref count on display domain
and individual power wells in the display domain.
---
 drivers/gpu/drm/i915/intel_runtime_pm.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index aa974b11928a..0f152bd88ecd 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -437,6 +437,8 @@ static void intel_power_well_disable(struct drm_i915_private *dev_priv,
 static void intel_power_well_get(struct drm_i915_private *dev_priv,
 				 struct i915_power_well *power_well)
 {
+	DRM_DEBUG_KMS("Getting power-well %s count: %d\n", power_well->desc->name,
+		      power_well->count);
 	if (!power_well->count++)
 		intel_power_well_enable(dev_priv, power_well);
 }
@@ -447,6 +449,8 @@ static void intel_power_well_put(struct drm_i915_private *dev_priv,
 	WARN(!power_well->count, "Use count on power well %s is already zero",
 	     power_well->desc->name);
 
+	DRM_DEBUG_KMS("Putting power-well %s count: %d\n", power_well->desc->name,
+		      power_well->count);
 	if (!--power_well->count)
 		intel_power_well_disable(dev_priv, power_well);
 }
@@ -1859,14 +1863,18 @@ intel_wakeref_t intel_display_power_get(struct drm_i915_private *dev_priv,
 					enum intel_display_power_domain domain)
 {
 	struct i915_power_domains *power_domains = &dev_priv->power_domains;
+	int display_power_domain_count;
 	intel_wakeref_t wakeref = intel_runtime_pm_get(dev_priv);
 
 	mutex_lock(&power_domains->lock);
 
+	display_power_domain_count = power_domains->domain_use_count[domain];
 	__intel_display_power_get_domain(dev_priv, domain);
 
 	mutex_unlock(&power_domains->lock);
 
+	DRM_DEBUG_KMS("Getting display domain use count: %d",
+		      display_power_domain_count);
 	return wakeref;
 }
 
@@ -1889,6 +1897,7 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
 	struct i915_power_domains *power_domains = &dev_priv->power_domains;
 	intel_wakeref_t wakeref;
 	bool is_enabled;
+	int display_power_domain_count;
 
 	wakeref = intel_runtime_pm_get_if_in_use(dev_priv);
 	if (!wakeref)
@@ -1896,6 +1905,7 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
 
 	mutex_lock(&power_domains->lock);
 
+	display_power_domain_count = power_domains->domain_use_count[domain];
 	if (__intel_display_power_is_enabled(dev_priv, domain)) {
 		__intel_display_power_get_domain(dev_priv, domain);
 		is_enabled = true;
@@ -1910,6 +1920,9 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
 		wakeref = 0;
 	}
 
+	DRM_DEBUG_KMS("Get display domain use count: %d, is_enabled: %d",
+		      display_power_domain_count, is_enabled);
+
 	return wakeref;
 }
 
@@ -1918,11 +1931,13 @@ static void __intel_display_power_put(struct drm_i915_private *dev_priv,
 {
 	struct i915_power_domains *power_domains;
 	struct i915_power_well *power_well;
+	int display_domain_use_count;
 
 	power_domains = &dev_priv->power_domains;
 
 	mutex_lock(&power_domains->lock);
 
+	display_domain_use_count = power_domains->domain_use_count[domain];
 	WARN(!power_domains->domain_use_count[domain],
 	     "Use count on domain %s is already zero\n",
 	     intel_display_power_domain_str(domain));
@@ -1932,6 +1947,8 @@ static void __intel_display_power_put(struct drm_i915_private *dev_priv,
 		intel_power_well_put(dev_priv, power_well);
 
 	mutex_unlock(&power_domains->lock);
+
+	DRM_DEBUG_KMS("Put display domain use count: %d", display_domain_use_count);
 }
 
 /**
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list