All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Pedro Ribeiro <pedrib@gmail.com>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.sourceforge.net
Subject: Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
Date: Wed, 17 Feb 2010 23:20:57 +0100	[thread overview]
Message-ID: <201002172320.57491.rjw@sisk.pl> (raw)
In-Reply-To: <74fd948d1002171410l5688c3dfy125ac5c7e80ad1a1@mail.gmail.com>

On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
> > On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
> >> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> > Hi,
> >> >
> >> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> >> > while aborting hibernation) introduced two new issues which were not
> >> > present in 2.6.33-rc7:
> >> >
> >> > - every second resume from hibernate results in a blank screen
> >> > - the annoying flash at the end of atomic copy/restore during the
> >> > hibernate process is back (present in kernels < 2.6.33)
> >> >
> >> > The first issue is serious, the second is just an annoyance.
> >>
> >> The second one is an expected price of fixing the aborted hibernation
> >> regression.
> >>
> >> The first one shouldn't happen, though.
> >>
> >> I'll see if I can reproduce that locally.
> >
> > No, I can't.
> >
> > Is the driver compiled directly into the kernel or modular?
> 
> The driver is modular.
> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
> a difference.

It shouldn't in fact, although I'm not sure.

> However, every since I reverted that commit I've done 10 test
> hibernations and no hang so far.

First, please try if you can reproduce it with non-modular driver.

Second, please check if the appended patch helps.

Rafael

---
 drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
 1 file changed, 9 insertions(+), 21 deletions(-)

Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
+++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
@@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static int i915_drm_freeze(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
 	pci_save_state(dev->pdev);
 
 	/* If KMS is active, we do the leavevt stuff here */
@@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
 
 	i915_save_state(dev);
 
-	return 0;
-}
-
-static void i915_drm_suspend(struct drm_device *dev)
-{
-	struct drm_i915_private *dev_priv = dev->dev_private;
-
 	intel_opregion_free(dev, 1);
 
 	/* Modeset on resume, not lid events */
 	dev_priv->modeset_on_lid = 0;
+
+	return 0;
 }
 
 static int i915_suspend(struct drm_device *dev, pm_message_t state)
@@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
 	if (error)
 		return error;
 
-	i915_drm_suspend(dev);
-
 	if (state.event == PM_EVENT_SUSPEND) {
 		/* Shut down the device */
 		pci_disable_device(dev->pdev);
@@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int error = 0;
 
+	i915_restore_state(dev);
+
+	intel_opregion_init(dev, 1);
+
 	/* KMS EnterVT equivalent */
 	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 		mutex_lock(&dev->struct_mutex);
@@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
 
 	pci_set_master(dev->pdev);
 
-	i915_restore_state(dev);
-
-	intel_opregion_init(dev, 1);
-
 	return i915_drm_thaw(dev);
 }
 
@@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
 	if (error)
 		return error;
 
-	i915_drm_suspend(drm_dev);
-
 	pci_disable_device(pdev);
 	pci_set_power_state(pdev, PCI_D3hot);
 
@@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	struct drm_device *drm_dev = pci_get_drvdata(pdev);
-	int error;
-
-	error = i915_drm_freeze(drm_dev);
-	if (!error)
-		i915_drm_suspend(drm_dev);
 
-	return error;
+	return i915_drm_freeze(drm_dev);
 }
 
 const struct dev_pm_ops i915_pm_ops = {

  reply	other threads:[~2010-02-17 22:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-17 18:47 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time Pedro Ribeiro
2010-02-17 20:11 ` Rafael J. Wysocki
2010-02-17 20:52   ` Rafael J. Wysocki
2010-02-17 22:10     ` Pedro Ribeiro
2010-02-17 22:20       ` Rafael J. Wysocki [this message]
2010-02-17 22:41         ` Nigel Cunningham
2010-02-18  0:02         ` Tino Keitel
2010-02-18  0:29         ` Pedro Ribeiro
2010-02-18 22:06           ` [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting Rafael J. Wysocki
2010-02-18 22:06           ` Rafael J. Wysocki
2010-02-19  6:39             ` Tino Keitel
2010-02-19  6:39             ` Tino Keitel
2010-02-22 15:47             ` Linus Torvalds
2010-02-22 16:32               ` Jesse Barnes
2010-02-22 16:32               ` Jesse Barnes
2010-02-22 16:36               ` Eric Anholt
2010-02-22 16:36               ` Eric Anholt
2010-02-22 15:47             ` Linus Torvalds

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=201002172320.57491.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=dri-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pedrib@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.