Patch "drm/nouveau: Don't enabling polling twice on runtime resume" has been added to the 4.4-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
drm/nouveau: Don't enabling polling twice on runtime resume
to the 4.4-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-nouveau-don-t-enabling-polling-twice-on-runtime-resume.patch
and it can be found in the queue-4.4 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 foo@baz Thu Jun 15 15:01:15 CEST 2017
From: Lyude Paul <[email protected]>
Date: Wed, 11 Jan 2017 21:25:23 -0500
Subject: drm/nouveau: Don't enabling polling twice on runtime resume
From: Lyude Paul <[email protected]>
[ Upstream commit cae9ff036eea577856d5b12860b4c79c5e71db4a ]
As it turns out, on cards that actually have CRTCs on them we're already calling drm_kms_helper_poll_enable(drm_dev) from nouveau_display_resume() before we call it in nouveau_pmops_runtime_resume(). This leads us to accidentally trying to enable polling twice, which results in a potential deadlock between the RPM locks and drm_dev->mode_config.mutex if we end up trying to enable polling the second time while output_poll_execute is running and holding the mode_config lock. As such, make sure we only enable polling in nouveau_pmops_runtime_resume() if we need to.
This fixes hangs observed on the ThinkPad W541
--- drivers/gpu/drm/nouveau/nouveau_display.c | 3 ++- drivers/gpu/drm/nouveau/nouveau_drm.c | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-)
drivers/gpu/drm/nouveau/nouveau_display.c +2 -1
@@ -370,7 +370,8 @@ nouveau_display_init(struct drm_device *return ret;/* enable polling for external displays */ -drm_kms_helper_poll_enable (dev); +if (!dev->mode_config.poll_enabled) +drm_kms_helper_poll_enable (dev);/* enable hotplug interrupts */ list_for_each_entry (connector, &dev->mode_config.connector_list, head) {
drivers/gpu/drm/nouveau/nouveau_drm.c +4 -1
@@ -743,7 +743,10 @@ nouveau_pmops_runtime_resume(struct devipci_set_master (pdev); ret =nouveau_do_resume (drm_dev, true); -drm_kms_helper_poll_enable (drm_dev); + +if (!drm_dev->mode_config.poll_enabled) +drm_kms_helper_poll_enable (drm_dev); +/* do magic */ nvif_mask (&device->object,0x088488 , (1 <<25 ), (1 <<25 ));vga_switcheroo_set_dynamic_switch (pdev,VGA_SWITCHEROO_ON );
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-nouveau-don-t-enabling-polling-twice-on-runtime-resume.patch