linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson c998e8a0f4 drm/i915: Hold rpm during GEM suspend in driver unload/suspend
i915_gem_suspend() tries to access the device to ensure it is idle and
all writes from the device are flushed to memory. It assumed is already
held the runtime pm wakeref, but we should explicitly acquire it for our
access to be safe.

[  619.926287] WARNING: CPU: 3 PID: 9353 at drivers/gpu/drm/i915/intel_drv.h:1750 gen6_write32+0x23e/0x2a0 [i915]
[  619.926300] RPM wakelock ref not held during HW access
[  619.926311] Modules linked in: vgem x86_pkg_temp_thermal intel_powerclamp snd_hda_codec_hdmi snd_hda_codec_generic snd_hda_codec coretemp snd_hwdep crct10dif_pclmul snd_hda_core crc32_pclmul snd_pcm mei_me mei lpc_ich ghash_clmulni_intel i915(-) sdhci_pci sdhci mmc_core e1000e ptp pps_core prime_numbers [last unloaded: snd_hda_intel]
[  619.926578] CPU: 3 PID: 9353 Comm: drv_module_relo Tainted: G     U          4.10.0-CI-Trybot_609+ #1
[  619.926585] Hardware name: LENOVO 42962WU/42962WU, BIOS 8DET56WW (1.26 ) 12/01/2011
[  619.926592] Call Trace:
[  619.926609]  dump_stack+0x67/0x92
[  619.926625]  __warn+0xc6/0xe0
[  619.926640]  warn_slowpath_fmt+0x4a/0x50
[  619.926726]  gen6_write32+0x23e/0x2a0 [i915]
[  619.926801]  gen6_mm_switch+0x38/0x70 [i915]
[  619.926871]  i915_switch_context+0xec/0xa10 [i915]
[  619.926942]  i915_gem_switch_to_kernel_context+0x13c/0x2b0 [i915]
[  619.927019]  i915_gem_suspend+0x2b/0x180 [i915]
[  619.927079]  i915_driver_unload+0x22/0x200 [i915]
[  619.927093]  ? __this_cpu_preempt_check+0x13/0x20
[  619.927105]  ? trace_hardirqs_on_caller+0xe7/0x200
[  619.927118]  ? trace_hardirqs_on+0xd/0x10
[  619.927128]  ? _raw_spin_unlock_irqrestore+0x3d/0x60
[  619.927192]  i915_pci_remove+0x14/0x20 [i915]
[  619.927205]  pci_device_remove+0x34/0xb0
[  619.927219]  device_release_driver_internal+0x158/0x210
[  619.927234]  driver_detach+0x3b/0x80
[  619.927245]  bus_remove_driver+0x53/0xd0
[  619.927256]  driver_unregister+0x27/0x50
[  619.927267]  pci_unregister_driver+0x25/0xa0
[  619.927351]  i915_exit+0x1a/0xb1a [i915]
[  619.927362]  SyS_delete_module+0x193/0x1e0
[  619.927378]  entry_SYSCALL_64_fastpath+0x1c/0xb1
[  619.927386] RIP: 0033:0x7f82b46c5d37
[  619.927393] RSP: 002b:00007ffdb6f610d8 EFLAGS: 00000246 ORIG_RAX: 00000000000000b0
[  619.927408] RAX: ffffffffffffffda RBX: ffffffff81481ff3 RCX: 00007f82b46c5d37
[  619.927415] RDX: 0000000000000001 RSI: 0000000000000800 RDI: 000000000224f558
[  619.927422] RBP: ffffc90001187f88 R08: 0000000000000000 R09: 00007ffdb6f61100
[  619.927428] R10: 000000000224f4e0 R11: 0000000000000246 R12: 0000000000000000
[  619.927435] R13: 00007ffdb6f612b0 R14: 0000000000000000 R15: 0000000000000000
[  619.927451]  ? __this_cpu_preempt_check+0x13/0x20

or

[  641.646590] WARNING: CPU: 1 PID: 8913 at drivers/gpu/drm/i915/intel_drv.h:1750 intel_runtime_pm_get_noresume+0x8b/0x90 [i915]
[  641.646595] RPM wakelock ref not held during HW access
[  641.646600] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_generic x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_codec snd_hwdep crct10dif_pclmul snd_hda_core crc32_pclmul ghash_clmulni_intel snd_pcm mei_me mei i915(-) r8169 mii prime_numbers i2c_hid [last unloaded: snd_hda_intel]
[  641.646825] CPU: 1 PID: 8913 Comm: drv_module_relo Tainted: G     U          4.10.0-CI-Trybot_609+ #1
[  641.646836] Hardware name: TOSHIBA SATELLITE P50-C/06F4                            , BIOS 1.20 10/08/2015
[  641.646843] Call Trace:
[  641.646857]  dump_stack+0x67/0x92
[  641.646869]  __warn+0xc6/0xe0
[  641.646880]  warn_slowpath_fmt+0x4a/0x50
[  641.646893]  ? __this_cpu_preempt_check+0x13/0x20
[  641.646904]  ? trace_hardirqs_on_caller+0xe7/0x200
[  641.646957]  intel_runtime_pm_get_noresume+0x8b/0x90 [i915]
[  641.647022]  __i915_add_request+0x423/0x540 [i915]
[  641.647080]  i915_gem_switch_to_kernel_context+0x148/0x2b0 [i915]
[  641.647145]  i915_gem_suspend+0x2b/0x180 [i915]
[  641.647189]  i915_driver_unload+0x22/0x200 [i915]
[  641.647200]  ? __this_cpu_preempt_check+0x13/0x20
[  641.647210]  ? trace_hardirqs_on_caller+0xe7/0x200
[  641.647220]  ? trace_hardirqs_on+0xd/0x10
[  641.647231]  ? _raw_spin_unlock_irqrestore+0x3d/0x60
[  641.647276]  i915_pci_remove+0x14/0x20 [i915]
[  641.647293]  pci_device_remove+0x34/0xb0
[  641.647307]  device_release_driver_internal+0x158/0x210
[  641.647321]  driver_detach+0x3b/0x80
[  641.647330]  bus_remove_driver+0x53/0xd0
[  641.647338]  driver_unregister+0x27/0x50
[  641.647348]  pci_unregister_driver+0x25/0xa0
[  641.647415]  i915_exit+0x1a/0xb1a [i915]
[  641.647429]  SyS_delete_module+0x193/0x1e0
[  641.647444]  entry_SYSCALL_64_fastpath+0x1c/0xb1
[  641.647453] RIP: 0033:0x7fc622bd2d37
[  641.647463] RSP: 002b:00007ffff8ffb5c8 EFLAGS: 00000246 ORIG_RAX: 00000000000000b0
[  641.647475] RAX: ffffffffffffffda RBX: ffffffff81481ff3 RCX: 00007fc622bd2d37
[  641.647480] RDX: 0000000000000001 RSI: 0000000000000800 RDI: 0000000000d49118
[  641.647485] RBP: ffffc90000997f88 R08: 0000000000000000 R09: 00007ffff8ffb5f0
[  641.647491] R10: 0000000000d490a0 R11: 0000000000000246 R12: 0000000000000000
[  641.647498] R13: 00007ffff8ffb7a0 R14: 0000000000000000 R15: 0000000000000000
[  641.647510]  ? __this_cpu_preempt_check+0x13/0x20

v2: Keep holding rpm until the end to cover i915_gem_sanitize() as well.

Fixes: 5ab57c7020 ("drm/i915: Flush logical context image out to memory upon suspend")
Fixes: 1c777c5d1d ("drm/i915/hsw: Fix GPU hang during resume from S3-devices state")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/20170302083029.19576-1-chris@chris-wilson.co.uk
Reviewed-by: Imre Deak <imre.deak@intel.com>
Cc: <stable@vger.kernel.org> # v4.9+
2017-03-02 12:44:08 +00:00
..
gvt Merge airlied/drm-next into drm-misc-next 2017-02-27 09:30:11 +01:00
selftests drm/i915: Assert all sg are initialised in fake_dma_object for selftests 2017-02-25 18:54:36 +00:00
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915: Consolidate checks for memcpy-from-wc support 2017-01-06 16:02:07 +00:00
i915_debugfs.c drm/i915: Keep a global seqno per-engine 2017-02-23 14:49:26 +00:00
i915_drv.c Merge airlied/drm-next into drm-misc-next 2017-02-27 09:30:11 +01:00
i915_drv.h drm/i915: use BUILD_BUG_ON to ensure platform name has been set up 2017-03-01 13:11:24 +02:00
i915_gem_batch_pool.c drm/i915: Use reservation_object_lock() 2017-02-21 12:48:51 +00:00
i915_gem_batch_pool.h
i915_gem_clflush.c drm/i915: Remove 'retire' parameter from intel_fb_obj_flush 2017-02-22 12:12:17 +00:00
i915_gem_clflush.h drm/i915: Perform object clflushing asynchronously 2017-02-22 12:12:15 +00:00
i915_gem_context.c drm/i915: Reduce context alignment 2017-02-27 16:01:47 +00:00
i915_gem_context.h drm/i915: Reduce context alignment 2017-02-27 16:01:47 +00:00
i915_gem_dmabuf.c drm/i915: Add some mock tests for dmabuf interop 2017-02-13 20:45:50 +00:00
i915_gem_evict.c drm/i915: Remove i915_address_space.start 2017-02-15 10:07:32 +00:00
i915_gem_execbuffer.c drm/i915: Drop support for I915_EXEC_CONSTANTS_* execbuf parameters. 2017-02-24 17:51:05 +00:00
i915_gem_fence_reg.c drm/i915: Replace 4096 with PAGE_SIZE or I915_GTT_PAGE_SIZE 2017-01-10 20:54:32 +00:00
i915_gem_fence_reg.h drm/i915: Replace 4096 with PAGE_SIZE or I915_GTT_PAGE_SIZE 2017-01-10 20:54:32 +00:00
i915_gem_gtt.c drm/i915: Remove redundant TLB invalidate on switching ppgtt 2017-02-27 16:01:46 +00:00
i915_gem_gtt.h drm/i915: Use preferred kernel types in i915_gem_gtt.c 2017-02-15 10:07:35 +00:00
i915_gem_internal.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
i915_gem_object.h drm/i915: Prevent concurrent tiling/framebuffer modifications 2017-03-01 17:57:17 +00:00
i915_gem_render_state.c drm/i915: Remove i915_vma_create from VMA API 2017-01-19 10:17:39 +00:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Signal first fence from irq handler if complete 2017-02-27 21:57:20 +00:00
i915_gem_request.h drm/i915: Signal first fence from irq handler if complete 2017-02-27 21:57:20 +00:00
i915_gem_shrinker.c drm/i915: Prevent concurrent tiling/framebuffer modifications 2017-03-01 17:57:17 +00:00
i915_gem_stolen.c drm/i915/gvt: Disable access to stolen memory as a guest 2017-02-16 11:59:13 +02:00
i915_gem_tiling.c drm/i915: Prevent concurrent tiling/framebuffer modifications 2017-03-01 17:57:17 +00:00
i915_gem_timeline.c drm/i915: Assert all timeline requests are gone before fini 2017-01-05 15:34:40 +00:00
i915_gem_timeline.h drm/i915: Keep a global seqno per-engine 2017-02-23 14:49:26 +00:00
i915_gem_userptr.c Linux 4.10-rc2 2017-01-04 11:35:18 +01:00
i915_gem.c drm/i915: Hold rpm during GEM suspend in driver unload/suspend 2017-03-02 12:44:08 +00:00
i915_gem.h drm/i915: Rename conditional GEM execution macros 2017-02-10 21:43:43 +00:00
i915_gpu_error.c drm/i915: Add i915_param charp macro magic 2017-02-22 10:32:35 +00:00
i915_guc_reg.h drm/i915/huc: Add HuC fw loading support 2017-01-19 11:18:55 +02:00
i915_guc_submission.c drm/i915/guc: Reorder __i915_guc_submit to reduce spinlock holdtime 2017-02-28 14:56:45 +00:00
i915_ioc32.c
i915_irq.c drm/i915: Delay disabling the user interrupt for breadcrumbs 2017-02-27 21:57:23 +00:00
i915_memcpy.c
i915_mm.c
i915_oa_hsw.c
i915_oa_hsw.h
i915_params.c drm/i915: Enable atomic support by default on supported platforms. 2017-02-09 15:56:45 +01:00
i915_params.h drm/i915: Use bool i915_param.alpha_support 2017-02-06 22:37:33 +00:00
i915_pci.c drm/i915: Provide a hook for selftests 2017-02-13 20:45:21 +00:00
i915_perf.c
i915_pvinfo.h
i915_reg.h drm/i915: Tighten mmio arrays for MIPI_PORT 2017-03-01 09:45:43 +00:00
i915_selftest.h drm/i915: Use fault-injection to force the shrinker to run in live GTT tests 2017-02-13 20:46:32 +00:00
i915_suspend.c
i915_sw_fence.c drm/i915: Flush the change in debugobject before reallocation 2017-01-16 12:21:19 +00:00
i915_sw_fence.h
i915_sysfs.c drm/i915: The return of i915_gpu_info to debugfs 2017-02-14 22:30:22 +00:00
i915_trace_points.c
i915_trace.h drm/i915: Remove change_domain tracepoint 2017-02-22 12:12:11 +00:00
i915_utils.h drm/i915: Sanity check the computed size and base of stolen memory 2017-01-31 11:19:23 +00:00
i915_vgpu.c drm/i915: Remove i915_address_space.start 2017-02-15 10:07:32 +00:00
i915_vgpu.h
i915_vma.c drm/i915: Remove the vma from the drm_mm if binding fails 2017-02-27 13:10:12 +00:00
i915_vma.h drm/i915: Exercise i915_vma_pin/i915_vma_insert 2017-02-13 20:46:41 +00:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Track pinned vma in intel_plane_state 2017-02-01 11:45:21 +02:00
intel_atomic.c drm/i915/glk: Fix Geminilake scalers mode programming 2017-02-23 14:57:01 +02:00
intel_audio.c drm/i915: Start moving the cdclk stuff into a distinct state structure 2017-02-08 18:07:10 +02:00
intel_bios.c drm/i915: Use range_overflows() 2017-01-06 16:02:11 +00:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Consolidate reporting of "missed breadcrumbs" 2017-02-28 10:09:06 +00:00
intel_cdclk.c drm/i915: Replace the .modeset_commit_cdclk() hook with a more direct .set_cdclk() hook 2017-02-08 18:07:11 +02:00
intel_color.c drm/i915/glk: Load the degamma LUT even in legacy gamma mode 2017-02-17 17:14:28 +02:00
intel_crt.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_csr.c drm/i915: DMC 1.03 for Geminilake 2017-02-20 10:35:03 +02:00
intel_ddi.c drm/i915: Only enable DDI IO power domains after enabling DPLL 2017-02-27 09:09:14 +02:00
intel_device_info.c drm/i915: use BUILD_BUG_ON to ensure platform name has been set up 2017-03-01 13:11:24 +02:00
intel_display.c drm/i915: Prevent concurrent tiling/framebuffer modifications 2017-03-01 17:57:17 +00:00
intel_dp_aux_backlight.c
intel_dp_link_training.c
intel_dp_mst.c drm/i915: Enable DDI IO power domains in the DP MST path 2017-03-02 10:49:00 +02:00
intel_dp.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_dpio_phy.c
intel_dpll_mgr.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
intel_dpll_mgr.h drm/i915: Remove unused function intel_ddi_get_link_dpll() 2017-02-10 11:40:27 +02:00
intel_drv.h drm/i915: Only enable DDI IO power domains after enabling DPLL 2017-02-27 09:09:14 +02:00
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c drm/i915/dsi: Make intel_dsi_enable/disable directly exec VBT sequences 2017-02-28 12:47:04 +02:00
intel_dsi_pll.c drm/i915/glk: Validate only DSI PORT A PLL divider 2017-02-28 11:54:52 +02:00
intel_dsi.c drm/i915/dsi: Skip delays for v3 VBTs in vid-mode 2017-03-01 15:58:08 +02:00
intel_dsi.h drm/i915/dsi: Make intel_dsi_enable/disable directly exec VBT sequences 2017-02-28 12:47:04 +02:00
intel_dvo.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_engine_cs.c drm/i915: Move w/a LRI debug message from context-init to driver load 2017-03-01 20:29:24 +00:00
intel_fbc.c drm/i915: Suppress fbc suggestion to increase stolen if disabled 2017-02-23 22:48:30 +00:00
intel_fbdev.c drm/i915/fbdev: Stop repeating tile configuration on stagnation 2017-02-24 12:25:42 +00:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: Remove 'retire' parameter from intel_fb_obj_flush 2017-02-22 12:12:17 +00:00
intel_frontbuffer.h drm/i915: Remove 'retire' parameter from intel_fb_obj_flush 2017-02-22 12:12:17 +00:00
intel_guc_fwif.h drm/i915/huc: Support HuC authentication 2017-01-19 11:19:07 +02:00
intel_guc_loader.c drm/i915/guc: Don't take struct_mutex for object unreference 2017-02-14 22:30:22 +00:00
intel_guc_log.c drm/i915/guc: Move GuC log related functions into dedicated file 2017-01-18 07:29:04 +00:00
intel_gvt.c drm/i915: make intel_gvt_init() later instead of too early 2017-02-07 17:21:06 +08:00
intel_gvt.h
intel_hangcheck.c drm/i915: Add initial selftests for hang detection and resets 2017-02-13 20:46:53 +00:00
intel_hdmi.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_hotplug.c drm/i915: Only enable hotplug interrupts if the display interrupts are enabled 2017-02-16 09:56:43 +00:00
intel_huc.c drm/i915/guc: Don't take struct_mutex for object unreference 2017-02-14 22:30:22 +00:00
intel_i2c.c drm/i915: Introduce IS_GEN9_BC for Skylake and Kabylake. 2017-01-24 10:29:00 -08:00
intel_lrc.c drm/i915/bdw: Do not write the replay bit of the ring mode register 2017-02-27 14:02:50 +02:00
intel_lrc.h drm/i915: Split intel_engine allocation and initialisation 2017-01-24 12:29:47 +00:00
intel_lspcon.c drm/i915/lspcon: Fix resume time initialization due to unasserted HPD 2017-02-16 11:59:10 +02:00
intel_lvds.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_mocs.c drm/i915: Emit to ringbuffer directly 2017-02-14 14:30:46 +00:00
intel_mocs.h
intel_modes.c
intel_opregion.c drm/i915: Fix not finding the VBT when it overlaps with OPREGION_ASLE_EXT 2017-02-16 11:59:14 +02:00
intel_overlay.c drm/i915: Emit to ringbuffer directly 2017-02-14 14:30:46 +00:00
intel_panel.c drm/i915: Start moving the cdclk stuff into a distinct state structure 2017-02-08 18:07:10 +02:00
intel_pipe_crc.c drm/i915: Avoid drm_atomic_state_put(NULL) on error paths 2017-01-18 13:47:22 +00:00
intel_pm.c drm/i915/gen9: Increase PCODE request timeout to 50ms 2017-03-01 13:05:07 +02:00
intel_psr.c drm/i915/psr: Fix compiler warnings for hsw_psr_disable() 2017-01-18 10:25:01 +00:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915: Reduce context alignment 2017-02-27 16:01:47 +00:00
intel_ringbuffer.h drm/i915: Delay disabling the user interrupt for breadcrumbs 2017-02-27 21:57:23 +00:00
intel_runtime_pm.c drm/i915: Only enable DDI IO power domains after enabling DPLL 2017-02-27 09:09:14 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_sideband.c drm/i915: Distinguish between timeout and error in sideband transactions 2017-02-27 17:22:19 +00:00
intel_sprite.c drm/i915/glk: Enable pipe CSC 2017-02-17 17:15:01 +02:00
intel_tv.c drm/i915: Store encoder power domain in struct intel_encoder 2017-02-27 09:07:51 +02:00
intel_uc.c drm/i915/guc: Move GuC log related functions into dedicated file 2017-01-18 07:29:04 +00:00
intel_uc.h drm/i915/huc: Support HuC authentication 2017-01-19 11:19:07 +02:00
intel_uncore.c drm/i915: Move uncore selfchecks to live selftest infrastructure 2017-02-13 20:45:47 +00:00
intel_vbt_defs.h
Kconfig drm/i915: Support explicit fencing for execbuf 2017-01-27 19:55:48 +00:00
Kconfig.debug drm/i915/tracepoints: Add request submit and execute tracepoints 2017-02-21 13:18:14 +00:00
Makefile drm/i915: Perform object clflushing asynchronously 2017-02-22 12:12:15 +00:00