Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Debian Kernel (http://www.linux-archive.org/debian-kernel/)
-   -   Bug#645547: intermittent memory corruption after hibernation unless i915.modeset=0 (http://www.linux-archive.org/debian-kernel/650901-bug-645547-intermittent-memory-corruption-after-hibernation-unless-i915-modeset-0-a.html)

Jonathan Nieder 03-30-2012 05:44 PM

Bug#645547: intermittent memory corruption after hibernation unless i915.modeset=0
 
tags 645547 + upstream patch
quit

Kj÷ Hansi Glaz wrote:

> I tried appending `i915.modeset=0` and thus falling back to vesa makes
> hibremation/resume working.
>
> I also tested 3.2.0-rc4 from experimetal (with modesetting enabled) and
> experience the same kind of problems that with 3.1.0. Sometimes
> processes segfault, sometimes the whole kernel hangs.

Thanks again for tracking this down. Please test the attached patch
against a 3.2.y kernel, such as the one from sid. For example, you
can do so like this:

# prerequisites
apt-get install git build-essential

# get the kernel history if you don't already have it.
git clone
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

# fetch point releases.
cd linux
git remote add -f stable
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

# try 3.2.y
git checkout stable/linux-3.2.y
cp /boot/config-$(uname -r) .config; # current configuration
make localmodconfig; # optional: minimize configuration
make deb-pkg; # optionally with -j<num> for parallel build
dpkg -i ../<name of package>; # as root
reboot
... test test test ...

# hopefully it reproduces the bug. So try the patch:
cd linux
git am -3sc <path to patch>
make deb-pkg; # maybe with -j4
dpkg -i ../<name of package>; # as root
reboot
... test some more ...

Alternative instructions are at [1].

Hope that helps,
Jonathan

[1] http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official
or the corresponding page in the debian-kernel-handbook package
From: Dave Airlie <airlied@redhat.com>
Date: Wed, 28 Mar 2012 10:48:49 +0100
Subject: drm/i915: suspend fbdev device around suspend/hibernate

commit 3fa016a0b5c5237e9c387fc3249592b2cb5391c6 upstream.

Looking at hibernate overwriting I though it looked like a cursor,
so I tracked down this missing piece to stop the cursor blink
timer. I've no idea if this is sufficient to fix the hibernate
problems people are seeing, but please test it.

Both radeon and nouveau have done this for a long time.

I've run this personally all night hib/resume cycles with no fails.

Reviewed-by: Keith Packard <keithp@keithp.com>
Reported-by: Petr Tesarik <kernel@tesarici.cz>
Reported-by: Stanislaw Gruszka <sgruszka@redhat.com>
Reported-by: Lots of misc segfaults after hibernate across the world.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=37142
Tested-by: Dave Airlie <airlied@redhat.com>
Tested-by: Bojan Smojver <bojan@rexursive.com>
Tested-by: Andreas Hartmann <andihartmann@01019freenet.de>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
drivers/gpu/drm/i915/i915_drv.c | 7 +++++++
drivers/gpu/drm/i915/intel_drv.h | 2 +-
drivers/gpu/drm/i915/intel_fb.c | 10 ++++++++++
3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index e2d85a9d3663..d04597dfa52c 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -442,6 +442,10 @@ static int i915_drm_freeze(struct drm_device *dev)
/* Modeset on resume, not lid events */
dev_priv->modeset_on_lid = 0;

+ console_lock();
+ intel_fbdev_set_suspend(dev, 1);
+ console_unlock();
+
return 0;
}

@@ -514,6 +518,9 @@ static int i915_drm_thaw(struct drm_device *dev)

dev_priv->modeset_on_lid = 0;

+ console_lock();
+ intel_fbdev_set_suspend(dev, 0);
+ console_unlock();
return error;
}

diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a1b4343814e8..83e820ea95b3 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -364,7 +364,7 @@ extern int intel_framebuffer_init(struct drm_device *dev,
struct drm_i915_gem_object *obj);
extern int intel_fbdev_init(struct drm_device *dev);
extern void intel_fbdev_fini(struct drm_device *dev);
-
+extern void intel_fbdev_set_suspend(struct drm_device *dev, int state);
extern void intel_prepare_page_flip(struct drm_device *dev, int plane);
extern void intel_finish_page_flip(struct drm_device *dev, int pipe);
extern void intel_finish_page_flip_plane(struct drm_device *dev, int plane);
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index ec49bae73382..d0ce34b78cc7 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -257,6 +257,16 @@ void intel_fbdev_fini(struct drm_device *dev)
kfree(dev_priv->fbdev);
dev_priv->fbdev = NULL;
}
+
+void intel_fbdev_set_suspend(struct drm_device *dev, int state)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ if (!dev_priv->fbdev)
+ return;
+
+ fb_set_suspend(dev_priv->fbdev->helper.fbdev, state);
+}
+
MODULE_LICENSE("GPL and additional rights");

void intel_fb_output_poll_changed(struct drm_device *dev)
--
1.7.10.rc1

Jonathan Nieder 04-04-2012 09:15 PM

Bug#645547: intermittent memory corruption after hibernation unless i915.modeset=0
 
tags 645547 + pending fixed-upstream
quit

Kj÷ Hansi Glaz wrote:

> I tried appending `i915.modeset=0` and thus falling back to vesa makes
> hibremation/resume working.

Said to be fixed by 3.2.14:

- drm/i915: suspend fbdev device around suspend/hibernate



--
To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20120404211552.GA18230@burratino">http://lists.debian.org/20120404211552.GA18230@burratino

Kj÷ Hansi Glaz 04-08-2012 10:27 AM

Bug#645547: intermittent memory corruption after hibernation unless i915.modeset=0
 
On Fri, Mar 30, 2012 at 12:44:52PM -0500, Jonathan Nieder wrote:
> tags 645547 + upstream patch
> quit
>
> Kj÷ Hansi Glaz wrote:
>
> > I tried appending `i915.modeset=0` and thus falling back to vesa makes
> > hibremation/resume working.
> >
> > I also tested 3.2.0-rc4 from experimetal (with modesetting enabled) and
> > experience the same kind of problems that with 3.1.0. Sometimes
> > processes segfault, sometimes the whole kernel hangs.
>
> Thanks again for tracking this down. Please test the attached patch
> against a 3.2.y kernel, such as the one from sid.

>From my experience of a dozen of hibernate/resume cycles, this patch works.

Thanks for following this bug!



--
To UNSUBSCRIBE, email to debian-kernel-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20120408102752.GK13930@a4nancy.net.eu.org">http://lists.debian.org/20120408102752.GK13930@a4nancy.net.eu.org


All times are GMT. The time now is 07:04 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.