Patch "drm/i915: Fix races on fbdev" has been added to the 4.5-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/i915: Fix races on fbdev
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-i915-fix-races-on-fbdev.patch
and it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a7442b93cf32c1e1ddb721a26cd1f92302e2a222Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 9 Mar 2016 12:52:53 +0100
Subject: drm/i915: Fix races on fbdev
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Lukas Wunner <[email protected]>
commit a7442b93cf32c1e1ddb721a26cd1f92302e2a222 upstream.
The ->lastclose callback invokes intel_fbdev_restore_mode() and has been witnessed to run before intel_fbdev_initial_config_async() has finished.
We might likewise receive hotplug events before we've had a chance to fully set up the fbdev.
Fix by waiting for the asynchronous thread to finish.
v2:
An async_synchronize_full() was also added to intel_fbdev_set_suspend() in v1 which turned out to be entirely gratuitous. It caused a deadlock on suspend (discovered by CI, thanks to Damien Lespiau and Tomi Sarvela for CI support) and was unnecessary since a device is never suspended until its ->probe callback (and all asynchronous tasks it scheduled) have finished. See dpm_prepare(), which calls wait_for_device_probe(), which calls async_synchronize_full().
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93580
--- drivers/gpu/drm/i915/i915_dma.c | 8 +++----- drivers/gpu/drm/i915/intel_fbdev.c | 3 +++ 2 files changed, 6 insertions(+), 5 deletions(-)
drivers/gpu/drm/i915/i915_dma.c +3 -5
@@ -437,11 +437,9 @@ static int i915_load_modeset_init(struct* Some ports require correctly set-up hpd registers for detection to * work properly (leading to ghost connected connector status), e.g. VGA * on gm45. Hence we can only set up the initial fbdev config after hpd -* irqs are fully enabled. Now we should scan for the initial config -* only once hotplug handling is enabled, but due to screwed-up locking -* around kms/fbdev init we can't protect the fdbev initial config -* scanning against hotplug events. Hence do this first and ignore the -* tiny window where we will loose hotplug notifactions. +* irqs are fully enabled. We protect the fbdev initial config scanning +* against hotplug events by waiting in intel_fbdev_output_poll_changed +* until the asynchronous thread has finished. */ intel_fbdev_initial_config_async (dev);
drivers/gpu/drm/i915/intel_fbdev.c +3 -0
@@ -797,6 +797,8 @@ void intel_fbdev_set_suspend(struct drm_void intel_fbdev_output_poll_changed (struct drm_device *dev) {struct drm_i915_private *dev_priv = dev->dev_private; + +async_synchronize_full ();if (dev_priv->fbdev)drm_fb_helper_hotplug_event (&dev_priv->fbdev->helper); }
@@ -808,6 +810,7 @@ void intel_fbdev_restore_mode(struct drmstruct intel_fbdev *ifbdev = dev_priv->fbdev;struct drm_fb_helper *fb_helper; +async_synchronize_full ();if (!ifbdev)return ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.5/drm-i915-fix-races-on-fbdev.patch
Quoted 8 lines · On Sat, Jun 04, 2016 at 02:22:34PM -0700, [email protected] wrote:
This is a note to let you know that I've just added the patch titled
drm/i915: Fix races on fbdev
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
Quoted 6 lines
The filename of the patch is:
drm-i915-fix-races-on-fbdev.patchand it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
That patch unfortunately turned out to cause deadlocks on suspend/resume on ILK, SNB and IVB in Intel's CI test farm (which I couldn't reproduce on my IVB machine and therefore couldn't debug). The commit was reverted upstream with 934458c2c95d.
Therefore please do not apply it to stable kernels. My apologies for the inconvenience.
Thanks,
Lukas
Quoted 86 lines
From
a7442b93cf32c1e1ddb721a26cd1f92302e2a222Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 9 Mar 2016 12:52:53 +0100
Subject: drm/i915: Fix races on fbdev
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bitFrom: Lukas Wunner <[email protected]>
commit
a7442b93cf32c1e1ddb721a26cd1f92302e2a222upstream.The ->lastclose callback invokes
intel_fbdev_restore_mode()and has been witnessed to run beforeintel_fbdev_initial_config_async()has finished.We might likewise receive hotplug events before we've had a chance to fully set up the fbdev.
Fix by waiting for the asynchronous thread to finish.
v2:
Anasync_synchronize_full()was also added tointel_fbdev_set_suspend()in v1 which turned out to be entirely gratuitous. It caused a deadlock on suspend (discovered by CI, thanks to Damien Lespiau and Tomi Sarvela for CI support) and was unnecessary since a device is never suspended until its ->probe callback (and all asynchronous tasks it scheduled) have finished. Seedpm_prepare(), which callswait_for_device_probe(), which callsasync_synchronize_full().Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93580
Reported-by Gustav F�gerlind <[email protected]>Reported-by "Li, Weinan Z" <[email protected]>Cc Chris Wilson <[email protected]>Signed-off-by Lukas Wunner <[email protected]>Signed-off-by Daniel Vetter <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- drivers/gpu/drm/i915/i915_dma.c | 8 +++----- drivers/gpu/drm/i915/intel_fbdev.c | 3 +++ 2 files changed, 6 insertions(+), 5 deletions(-)drivers/gpu/drm/i915/i915_dma.c +3
-5@@ -437,11 +437,9 @@ static int i915_load_modeset_init(struct* Some ports require correctly set-up hpd registers for detection to * work properly (leading to ghost connected connector status), e.g. VGA * on gm45. Hence we can only set up the initial fbdev config after hpd -* irqs are fully enabled. Now we should scan for the initial config -* only once hotplug handling is enabled, but due to screwed-up locking -* around kms/fbdev init we can't protect the fdbev initial config -* scanning against hotplug events. Hence do this first and ignore the -* tiny window where we will loose hotplug notifactions. +* irqs are fully enabled. We protect the fbdev initial config scanning +* against hotplug events by waiting in intel_fbdev_output_poll_changed +* until the asynchronous thread has finished. */ intel_fbdev_initial_config_async (dev);drivers/gpu/drm/i915/intel_fbdev.c +3
-0@@ -797,6 +797,8 @@ void intel_fbdev_set_suspend(struct drm_void intel_fbdev_output_poll_changed (struct drm_device *dev) {struct drm_i915_private *dev_priv = dev->dev_private; + +async_synchronize_full ();if (dev_priv->fbdev)drm_fb_helper_hotplug_event (&dev_priv->fbdev->helper); }@@ -808,6 +810,7 @@ void intel_fbdev_restore_mode(struct drmstruct intel_fbdev *ifbdev = dev_priv->fbdev;struct drm_fb_helper *fb_helper; +async_synchronize_full ();if (!ifbdev)return ;Patches currently in stable-queue which might be from [email protected] are
queue-4.5/drm-i915-fix-races-on-fbdev.patch
Greg KH
maintainerQuoted 16 lines · Lukas Wunner
Quoted 8 lines · On Sat, Jun 04, 2016 at 02:22:34PM -0700, [email protected] wrote:
This is a note to let you know that I've just added the patch titled
drm/i915: Fix races on fbdev
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summaryQuoted 6 lines
The filename of the patch is:
drm-i915-fix-races-on-fbdev.patchand it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 7 lines
That patch unfortunately turned out to cause deadlocks on suspend/resume on ILK, SNB and IVB in Intel's CI test farm (which I couldn't reproduce on my IVB machine and therefore couldn't debug). The commit was reverted upstream with
934458c2c95d.Therefore please do not apply it to stable kernels. My apologies for the inconvenience.
Now removed, thanks.
greg k-h