From: Greg Kroah-Hartman Date: Thu, 29 Mar 2012 22:46:31 +0000 (-0700) Subject: 3.3-stable patches X-Git-Tag: v3.0.27~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fca288a64b16d17b81cb8bca08dc1d28fcf3d410;p=thirdparty%2Fkernel%2Fstable-queue.git 3.3-stable patches added patches: drm-i915-suspend-fbdev-device-around-suspend-hibernate.patch --- diff --git a/queue-3.3/drm-i915-suspend-fbdev-device-around-suspend-hibernate.patch b/queue-3.3/drm-i915-suspend-fbdev-device-around-suspend-hibernate.patch new file mode 100644 index 00000000000..f89ac84691e --- /dev/null +++ b/queue-3.3/drm-i915-suspend-fbdev-device-around-suspend-hibernate.patch @@ -0,0 +1,88 @@ +From 3fa016a0b5c5237e9c387fc3249592b2cb5391c6 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 28 Mar 2012 10:48:49 +0100 +Subject: drm/i915: suspend fbdev device around suspend/hibernate + +From: Dave Airlie + +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 +Reported-by: Petr Tesarik +Reported-by: Stanislaw Gruszka +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 +Tested-by: Bojan Smojver +Tested-by: Andreas Hartmann +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + 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(-) + +--- 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_de + /* 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_devi + + dev_priv->modeset_on_lid = 0; + ++ console_lock(); ++ intel_fbdev_set_suspend(dev, 0); ++ console_unlock(); + return error; + } + +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -381,7 +381,7 @@ extern int intel_framebuffer_init(struct + 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); +--- a/drivers/gpu/drm/i915/intel_fb.c ++++ b/drivers/gpu/drm/i915/intel_fb.c +@@ -258,6 +258,16 @@ void intel_fbdev_fini(struct drm_device + 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) diff --git a/queue-3.3/series b/queue-3.3/series index 9dc2f358825..1793df26ff0 100644 --- a/queue-3.3/series +++ b/queue-3.3/series @@ -156,3 +156,4 @@ slub-do-not-hold-slub_lock-when-calling-sysfs_slab_add.patch nfsv4-fix-two-infinite-loops-in-the-mount-code.patch nfsv4.1-fix-layoutcommit-error-handling.patch module-remove-module-size-limit.patch +drm-i915-suspend-fbdev-device-around-suspend-hibernate.patch