From 9abfa161363163e3c0f8c5b92e18b3f9a5f0e570 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mar 30 2012 16:56:18 +0000 Subject: Fix i915 fbdev cursor blink around suspend/hibernate from Dave Airlied --- diff --git a/drm-i915-suspend-fbdev-device-around-suspend-hiberna.patch b/drm-i915-suspend-fbdev-device-around-suspend-hiberna.patch new file mode 100644 index 0000000..826e4c5 --- /dev/null +++ b/drm-i915-suspend-fbdev-device-around-suspend-hiberna.patch @@ -0,0 +1,92 @@ +From 3fa016a0b5c5237e9c387fc3249592b2cb5391c6 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Wed, 28 Mar 2012 10:48:49 +0100 +Subject: [PATCH] drm/i915: suspend fbdev device around suspend/hibernate + +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 +Cc: stable@vger.kernel.org +Signed-off-by: Dave Airlie +--- + 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 deletions(-) + +diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c +index 0694e17..1a7559b 100644 +--- a/drivers/gpu/drm/i915/i915_drv.c ++++ b/drivers/gpu/drm/i915/i915_drv.c +@@ -467,6 +467,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; + } + +@@ -539,6 +543,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 9cec6c3..5a14149 100644 +--- a/drivers/gpu/drm/i915/intel_drv.h ++++ b/drivers/gpu/drm/i915/intel_drv.h +@@ -382,7 +382,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 2d87669..19ecd78 100644 +--- a/drivers/gpu/drm/i915/intel_fb.c ++++ b/drivers/gpu/drm/i915/intel_fb.c +@@ -254,6 +254,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.7.6 + diff --git a/kernel.spec b/kernel.spec index 711a858..f08079e 100644 --- a/kernel.spec +++ b/kernel.spec @@ -684,6 +684,7 @@ Patch1800: drm-vgem.patch # intel drm is all merged upstream Patch1824: drm-intel-next.patch Patch1825: drm-i915-dp-stfu.patch +Patch1827: drm-i915-suspend-fbdev-device-around-suspend-hiberna.patch Patch1900: linux-2.6-intel-iommu-igfx.patch @@ -1439,6 +1440,8 @@ ApplyPatch drm-i915-dp-stfu.patch ApplyPatch linux-2.6-intel-iommu-igfx.patch +ApplyPatch drm-i915-suspend-fbdev-device-around-suspend-hiberna.patch + # silence the ACPI blacklist code ApplyPatch linux-2.6-silence-acpi-blacklist.patch ApplyPatch quite-apm.patch @@ -2372,6 +2375,7 @@ fi # '-' %changelog * Fri Mar 30 2012 Josh Boyer +- Fix i915 fbdev cursor blink around suspend/hibernate from Dave Airlied - CVE-2012-1601: kvm: NULL dereference from irqchip_in_kernel and vcpu->arch.apic inconsistency (rhbz 808207) - Add patch to fix incorrect buffer length in __nfs4_get_acl_uncached