From: Greg Kroah-Hartman Date: Thu, 15 Jun 2017 06:43:48 +0000 (+0200) Subject: 4.11-stable patches X-Git-Tag: v4.9.33~32 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c57bb63ed3b6ad8ffaa1a9228c3827d9ecf1e99b;p=thirdparty%2Fkernel%2Fstable-queue.git 4.11-stable patches added patches: drm-i915-do-not-drop-pagetables-when-empty.patch drm-i915-prevent-the-system-suspend-complete-optimization.patch pci-pm-add-needs_resume-flag-to-avoid-suspend-complete-optimization.patch --- diff --git a/queue-4.11/drm-i915-do-not-drop-pagetables-when-empty.patch b/queue-4.11/drm-i915-do-not-drop-pagetables-when-empty.patch new file mode 100644 index 00000000000..c95f329fa2c --- /dev/null +++ b/queue-4.11/drm-i915-do-not-drop-pagetables-when-empty.patch @@ -0,0 +1,79 @@ +From daniel.vetter@ffwll.ch Thu Jun 15 08:32:03 2017 +From: Daniel Vetter +Date: Fri, 26 May 2017 10:29:06 +0200 +Subject: drm/i915: Do not drop pagetables when empty +To: Intel Graphics Development +Cc: Chris Wilson , Michel Thierry , Mika Kuoppala , Joonas Lahtinen , Michał Winiarski , Daniel Vetter , Jani Nikula , "# v4 . 10+" +Message-ID: <20170526082906.8982-1-daniel.vetter@ffwll.ch> + + +From: Chris Wilson + +This is the minimal backport for stable of the upstream commit: + +commit dd19674bacba227ae5d3ce680cbc5668198894dc +Author: Chris Wilson +Date: Wed Feb 15 08:43:46 2017 +0000 + + drm/i915: Remove bitmap tracking for used-ptes + +Due to a race with the shrinker, when we try to allocate a pagetable, we +may end up shrinking it instead. This comes as a nasty surprise as we +try to dereference it to fill in the pagetable entries for the object. + +In linus/master this is fixed by pinning the pagetables prior to +allocation, but that backport is roughly + drivers/gpu/drm/i915/i915_gem_gtt.c | 10 ---------- + 1 file changed, 10 deletions(-) +i.e. unsuitable for stable. Instead we neuter the code that tried to +free the pagetables. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99295 +Fixes: 2ce5179fe826 ("drm/i915/gtt: Free unused lower-level page tables") +Signed-off-by: Chris Wilson +Cc: Michel Thierry +Cc: Mika Kuoppala +Cc: Chris Wilson +Cc: Joonas Lahtinen +Cc: Michał Winiarski +Cc: Daniel Vetter +Cc: Jani Nikula +Cc: intel-gfx@lists.freedesktop.org +Cc: # v4.10+ +Tested-by: Maël Lavault +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- a/drivers/gpu/drm/i915/i915_gem_gtt.c ++++ b/drivers/gpu/drm/i915/i915_gem_gtt.c +@@ -755,10 +755,6 @@ static bool gen8_ppgtt_clear_pt(struct i + GEM_BUG_ON(pte_end > GEN8_PTES); + + bitmap_clear(pt->used_ptes, pte, num_entries); +- if (USES_FULL_PPGTT(vm->i915)) { +- if (bitmap_empty(pt->used_ptes, GEN8_PTES)) +- return true; +- } + + pt_vaddr = kmap_px(pt); + +@@ -798,9 +794,6 @@ static bool gen8_ppgtt_clear_pd(struct i + } + } + +- if (bitmap_empty(pd->used_pdes, I915_PDES)) +- return true; +- + return false; + } + +@@ -829,9 +822,6 @@ static bool gen8_ppgtt_clear_pdp(struct + + mark_tlbs_dirty(ppgtt); + +- if (bitmap_empty(pdp->used_pdpes, I915_PDPES_PER_PDP(dev_priv))) +- return true; +- + return false; + } + diff --git a/queue-4.11/drm-i915-prevent-the-system-suspend-complete-optimization.patch b/queue-4.11/drm-i915-prevent-the-system-suspend-complete-optimization.patch new file mode 100644 index 00000000000..0e9606c0105 --- /dev/null +++ b/queue-4.11/drm-i915-prevent-the-system-suspend-complete-optimization.patch @@ -0,0 +1,158 @@ +From 6ab92afc95c9bd6877cb42e7b24f65be887a5440 Mon Sep 17 00:00:00 2001 +From: Imre Deak +Date: Tue, 2 May 2017 15:04:09 +0300 +Subject: drm/i915: Prevent the system suspend complete optimization +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Imre Deak + +commit 6ab92afc95c9bd6877cb42e7b24f65be887a5440 upstream. + +Since + +commit bac2a909a096c9110525c18cbb8ce73c660d5f71 +Author: Rafael J. Wysocki +Date: Wed Jan 21 02:17:42 2015 +0100 + + PCI / PM: Avoid resuming PCI devices during system suspend + +PCI devices will default to allowing the system suspend complete +optimization where devices are not woken up during system suspend if +they were already runtime suspended. This however breaks the i915/HDA +drivers for two reasons: + +- The i915 driver has system suspend specific steps that it needs to + run, that bring the device to a different state than its runtime + suspended state. + +- The HDA driver's suspend handler requires power that it will request + from the i915 driver's power domain handler. This in turn requires the + i915 driver to runtime resume itself, but this won't be possible if the + suspend complete optimization is in effect: in this case the i915 + runtime PM is disabled and trying to get an RPM reference returns + -EACCESS. + +Solve this by requiring the PCI/PM core to resume the device during +system suspend which in effect disables the suspend complete optimization. + +Regardless of the above commit the optimization stayed disabled for DRM +devices until + +commit d14d2a8453d650bea32a1c5271af1458cd283a0f +Author: Lukas Wunner +Date: Wed Jun 8 12:49:29 2016 +0200 + + drm: Remove dev_pm_ops from drm_class + +so this patch is in practice a fix for this commit. Another reason for +the bug staying hidden for so long is that the optimization for a device +is disabled if it's disabled for any of its children devices. i915 may +have a backlight device as its child which doesn't support runtime PM +and so doesn't allow the optimization either. So if this backlight +device got registered the bug stayed hidden. + +Credits to Marta, Tomi and David who enabled pstore logging, +that caught one instance of this issue across a suspend/ +resume-to-ram and Ville who rememberd that the optimization was enabled +for some devices at one point. + +The first WARN triggered by the problem: + +[ 6250.746445] WARNING: CPU: 2 PID: 17384 at drivers/gpu/drm/i915/intel_runtime_pm.c:2846 intel_runtime_pm_get+0x6b/0xd0 [i915] +[ 6250.746448] pm_runtime_get_sync() failed: -13 +[ 6250.746451] Modules linked in: snd_hda_intel i915 vgem snd_hda_codec_hdmi x86_pkg_temp_thermal intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul +snd_hda_codec_realtek snd_hda_codec_generic ghash_clmulni_intel e1000e snd_hda_codec snd_hwdep snd_hda_core ptp mei_me pps_core snd_pcm lpc_ich mei prime_ +numbers i2c_hid i2c_designware_platform i2c_designware_core [last unloaded: i915] +[ 6250.746512] CPU: 2 PID: 17384 Comm: kworker/u8:0 Tainted: G U W 4.11.0-rc5-CI-CI_DRM_334+ #1 +[ 6250.746515] Hardware name: /NUC5i5RYB, BIOS RYBDWi35.86A.0362.2017.0118.0940 01/18/2017 +[ 6250.746521] Workqueue: events_unbound async_run_entry_fn +[ 6250.746525] Call Trace: +[ 6250.746530] dump_stack+0x67/0x92 +[ 6250.746536] __warn+0xc6/0xe0 +[ 6250.746542] ? pci_restore_standard_config+0x40/0x40 +[ 6250.746546] warn_slowpath_fmt+0x46/0x50 +[ 6250.746553] ? __pm_runtime_resume+0x56/0x80 +[ 6250.746584] intel_runtime_pm_get+0x6b/0xd0 [i915] +[ 6250.746610] intel_display_power_get+0x1b/0x40 [i915] +[ 6250.746646] i915_audio_component_get_power+0x15/0x20 [i915] +[ 6250.746654] snd_hdac_display_power+0xc8/0x110 [snd_hda_core] +[ 6250.746661] azx_runtime_resume+0x218/0x280 [snd_hda_intel] +[ 6250.746667] pci_pm_runtime_resume+0x76/0xa0 +[ 6250.746672] __rpm_callback+0xb4/0x1f0 +[ 6250.746677] ? pci_restore_standard_config+0x40/0x40 +[ 6250.746682] rpm_callback+0x1f/0x80 +[ 6250.746686] ? pci_restore_standard_config+0x40/0x40 +[ 6250.746690] rpm_resume+0x4ba/0x740 +[ 6250.746698] __pm_runtime_resume+0x49/0x80 +[ 6250.746703] pci_pm_suspend+0x57/0x140 +[ 6250.746709] dpm_run_callback+0x6f/0x330 +[ 6250.746713] ? pci_pm_freeze+0xe0/0xe0 +[ 6250.746718] __device_suspend+0xf9/0x370 +[ 6250.746724] ? dpm_watchdog_set+0x60/0x60 +[ 6250.746730] async_suspend+0x1a/0x90 +[ 6250.746735] async_run_entry_fn+0x34/0x160 +[ 6250.746741] process_one_work+0x1f2/0x6d0 +[ 6250.746749] worker_thread+0x49/0x4a0 +[ 6250.746755] kthread+0x107/0x140 +[ 6250.746759] ? process_one_work+0x6d0/0x6d0 +[ 6250.746763] ? kthread_create_on_node+0x40/0x40 +[ 6250.746768] ret_from_fork+0x2e/0x40 +[ 6250.746778] ---[ end trace 102a62fd2160f5e6 ]--- + +v2: +- Use the new pci_dev->needs_resume flag, to avoid any overhead during + the ->pm_prepare hook. (Rafael) + +v3: +- Update commit message to reference the actual regressing commit. + (Lukas) + +v4: +- Rebase on v4 of patch 1/2. + +Fixes: d14d2a8453d6 ("drm: Remove dev_pm_ops from drm_class") +References: https://bugs.freedesktop.org/show_bug.cgi?id=100378 +References: https://bugs.freedesktop.org/show_bug.cgi?id=100770 +Cc: Rafael J. Wysocki +Cc: Marta Lofstedt +Cc: David Weinehall +Cc: Tomi Sarvela +Cc: Ville Syrjälä +Cc: Mika Kuoppala +Cc: Chris Wilson +Cc: Takashi Iwai +Cc: Bjorn Helgaas +Cc: Lukas Wunner +Cc: linux-pci@vger.kernel.org +Signed-off-by: Imre Deak +Reviewed-by: Chris Wilson +Reported-and-tested-by: Marta Lofstedt +Link: http://patchwork.freedesktop.org/patch/msgid/1493726649-32094-2-git-send-email-imre.deak@intel.com +(cherry picked from commit adfdf85d795f4d4f487b61ee0b169d64c6e19081) +Signed-off-by: Jani Nikula +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_drv.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/gpu/drm/i915/i915_drv.c ++++ b/drivers/gpu/drm/i915/i915_drv.c +@@ -1206,6 +1206,15 @@ int i915_driver_load(struct pci_dev *pde + goto out_free_priv; + + pci_set_drvdata(pdev, &dev_priv->drm); ++ /* ++ * Disable the system suspend direct complete optimization, which can ++ * leave the device suspended skipping the driver's suspend handlers ++ * if the device was already runtime suspended. This is needed due to ++ * the difference in our runtime and system suspend sequence and ++ * becaue the HDA driver may require us to enable the audio power ++ * domain during system suspend. ++ */ ++ pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME; + + ret = i915_driver_init_early(dev_priv, ent); + if (ret < 0) diff --git a/queue-4.11/pci-pm-add-needs_resume-flag-to-avoid-suspend-complete-optimization.patch b/queue-4.11/pci-pm-add-needs_resume-flag-to-avoid-suspend-complete-optimization.patch new file mode 100644 index 00000000000..7bada040966 --- /dev/null +++ b/queue-4.11/pci-pm-add-needs_resume-flag-to-avoid-suspend-complete-optimization.patch @@ -0,0 +1,58 @@ +From 4d071c3238987325b9e50e33051a40d1cce311cc Mon Sep 17 00:00:00 2001 +From: Imre Deak +Date: Tue, 23 May 2017 14:18:17 -0500 +Subject: PCI/PM: Add needs_resume flag to avoid suspend complete optimization + +From: Imre Deak + +commit 4d071c3238987325b9e50e33051a40d1cce311cc upstream. + +Some drivers - like i915 - may not support the system suspend direct +complete optimization due to differences in their runtime and system +suspend sequence. Add a flag that when set resumes the device before +calling the driver's system suspend handlers which effectively disables +the optimization. + +Needed by a future patch fixing suspend/resume on i915. + +Suggested by Rafael. + +Signed-off-by: Imre Deak +Signed-off-by: Bjorn Helgaas +Acked-by: Rafael J. Wysocki +Cc: stable@vger.kernel.org +(rebased on v4.8, added kernel version to commit message stable tag) +Signed-off-by: Imre Deak +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/pci.c | 3 ++- + include/linux/pci.h | 5 +++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/pci/pci.c ++++ b/drivers/pci/pci.c +@@ -2142,7 +2142,8 @@ bool pci_dev_keep_suspended(struct pci_d + + if (!pm_runtime_suspended(dev) + || pci_target_state(pci_dev) != pci_dev->current_state +- || platform_pci_need_resume(pci_dev)) ++ || platform_pci_need_resume(pci_dev) ++ || (pci_dev->dev_flags & PCI_DEV_FLAGS_NEEDS_RESUME)) + return false; + + /* +--- a/include/linux/pci.h ++++ b/include/linux/pci.h +@@ -178,6 +178,11 @@ enum pci_dev_flags { + PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7), + /* Get VPD from function 0 VPD */ + PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8), ++ /* ++ * Resume before calling the driver's system suspend hooks, disabling ++ * the direct_complete optimization. ++ */ ++ PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11), + }; + + enum pci_irq_reroute_variant {