Fix i915 fbdev cursor blink around suspend/hibernate from Dave Airlied
This commit is contained in:
parent
c898e790c9
commit
9abfa16136
|
@ -0,0 +1,92 @@
|
|||
From 3fa016a0b5c5237e9c387fc3249592b2cb5391c6 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
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 <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>
|
||||
---
|
||||
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
|
||||
|
|
@ -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 <jwboyer@redhat.com>
|
||||
- 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
|
||||
|
|
Loading…
Reference in New Issue