public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 3/4] drm/i915: make assert_device_not_suspended more precise
Date: Mon,  9 Nov 2015 20:20:10 +0200	[thread overview]
Message-ID: <1447093211-11469-4-git-send-email-imre.deak@intel.com> (raw)
In-Reply-To: <1447093211-11469-1-git-send-email-imre.deak@intel.com>

Atm, we assert that the device is not suspended after the point when the
HW is truly put to a suspended state. This is fine, but we can catch
more problems if we check the RPM refcount. After that one drops to zero
we shouldn't access the HW any more, although the actual suspend may be
delayed. The only complication is that we want to avoid asserts while
the suspend handler itself is running, so add a flag to handle this
case.

This caught additional WARNs from the atomic path, those will be fixed
as a follow-up.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.c         |  5 +++++
 drivers/gpu/drm/i915/i915_drv.h         |  5 +++++
 drivers/gpu/drm/i915/intel_runtime_pm.c | 14 ++++++++++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 77d183d..caeb218 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -1494,6 +1494,9 @@ static int intel_runtime_suspend(struct device *device)
 
 		return -EAGAIN;
 	}
+
+	dev_priv->pm.disable_suspended_assert = true;
+
 	/*
 	 * We are safe here against re-faults, since the fault handler takes
 	 * an RPM reference.
@@ -1518,6 +1521,8 @@ static int intel_runtime_suspend(struct device *device)
 	intel_uncore_forcewake_reset(dev, false);
 	dev_priv->pm.suspended = true;
 
+	dev_priv->pm.disable_suspended_assert = false;
+
 	/*
 	 * FIXME: We really should find a document that references the arguments
 	 * used below!
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 5628c5a..43fd341 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1599,6 +1599,11 @@ struct skl_wm_level {
  * For more, read the Documentation/power/runtime_pm.txt.
  */
 struct i915_runtime_pm {
+	/*
+	 * Used for the duration of runtime suspend to avoid false device
+	 * suspended asserts.
+	 */
+	bool disable_suspended_assert;
 	bool suspended;
 	bool irqs_enabled;
 };
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 4d39b3c..2e2083c 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -2120,8 +2120,18 @@ void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume)
 
 void assert_device_not_suspended(struct drm_i915_private *dev_priv)
 {
-	WARN_ONCE(HAS_RUNTIME_PM(dev_priv->dev) && dev_priv->pm.suspended,
-		  "Device suspended\n");
+	int rpm_usage;
+
+	if (!HAS_RUNTIME_PM(dev_priv) || dev_priv->pm.disable_suspended_assert)
+		return;
+
+#ifdef CONFIG_PM
+	rpm_usage = atomic_read(&dev_priv->dev->dev->power.usage_count);
+#else
+	rpm_usage = 1;
+#endif
+
+	WARN_ONCE(dev_priv->pm.suspended || !rpm_usage, "Device suspended\n");
 }
 
 /**
-- 
2.5.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2015-11-09 18:24 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-09 18:20 [PATCH 0/4] drm/i915: improve the RPM device suspended assert Imre Deak
2015-11-09 18:20 ` [PATCH 1/4] drm/i915: export assert_device_not_suspended Imre Deak
2015-11-09 18:30   ` Ville Syrjälä
2015-11-09 18:43     ` Imre Deak
2015-11-09 20:52   ` Chris Wilson
2015-11-09 18:20 ` [PATCH 2/4] drm/i915: use assert_device_not_suspended instead of opencoding it Imre Deak
2015-11-09 21:04   ` Chris Wilson
2015-11-09 18:20 ` Imre Deak [this message]
2015-11-09 19:13   ` [PATCH v2 3/4] drm/i915: make assert_device_not_suspended more precise Imre Deak
2015-11-09 21:44     ` Chris Wilson
2015-11-10  9:47       ` Imre Deak
2015-11-18 14:37     ` Daniel Vetter
2015-11-18 14:44       ` Imre Deak
2015-11-18 14:58         ` Imre Deak
2015-11-18 15:01           ` Daniel Vetter
2015-11-18 15:11             ` Imre Deak
2015-11-18 15:47               ` Daniel Vetter
2015-11-18 16:09                 ` Imre Deak
2015-11-09 18:20 ` [PATCH 4/4] drm/i915: add assert_device_not_suspended to GGTT PTE updaters Imre Deak
2015-11-09 18:37   ` Ville Syrjälä
2015-11-09 18:48     ` Imre Deak
2015-11-09 19:14   ` [PATCH v2 " Imre Deak
2015-11-09 21:11     ` Chris Wilson
2015-11-09 21:24       ` Imre Deak
2015-11-09 21:29         ` Imre Deak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447093211-11469-4-git-send-email-imre.deak@intel.com \
    --to=imre.deak@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox