linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson 9caa34aa93 drm/i915: Only wait upon the execution timeline when unlocked
In order to walk the list of all timelines, we currently require the
struct_mutex. We are sometimes called prior to the struct_mutex being
taken by the caller (i.e !I915_WAIT_LOCKED) in which case we can only
trust the global execution timelines (as these are owned by the device).
This means in the unlocked phase we can only wait upon the currently
executing requests and not all queued.

[  175.743243] general protection fault: 0000 [#1] SMP
[  175.743263] Modules linked in: nls_iso8859_1 intel_rapl x86_pkg_temp_thermal coretemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel iwlwifi aesni_intel aes_x86_64 lrw snd_soc_rt5640 gf128mul snd_soc_rl6231 snd_soc_core glue_helper snd_compress snd_pcm_dmaengine snd_hda_codec_hdmi ablk_helper snd_hda_codec_realtek cryptd snd_hda_codec_generic serio_raw cfg80211 snd_hda_intel snd_hda_codec ir_lirc_codec snd_hda_core lirc_dev snd_hwdep snd_pcm lpc_ich mei_me mei snd_seq_midi shpchp snd_seq_midi_event snd_rawmidi snd_seq snd_seq_device snd_timer rc_rc6_mce acpi_als nuvoton_cir kfifo_buf rc_core snd industrialio snd_soc_sst_acpi soundcore snd_soc_sst_match i2c_designware_platform 8250_dw i2c_designware_core dw_dmac spi_pxa2xx_platform mac_hid acpi_pad parport_pc ppdev lp parport
[  175.743509]  autofs4 i915 e1000e psmouse ptp pps_core xhci_pci ehci_pci ahci xhci_hcd ehci_hcd libahci video sdhci_acpi sdhci i2c_hid hid
[  175.743560] CPU: 2 PID: 2386 Comm: wtdg_monitor.sh Tainted: G     U          4.9.0-rc4-nightly+ #2
[  175.743581] Hardware name:                  /NUC5i7RYB, BIOS RYBDWi35.86A.0358.2016.0606.1423 06/06/2016
[  175.743603] task: ffff88024509ba80 task.stack: ffffc9007bd18000
[  175.743618] RIP: 0010:[<ffffffffa01af29b>]  [<ffffffffa01af29b>] i915_gem_wait_for_idle+0x3b/0x140 [i915]
[  175.743660] RSP: 0000:ffffc9007bd1b9b8  EFLAGS: 00010297
[  175.743674] RAX: ffff88024489d248 RBX: 0000000000000000 RCX: 0000000000000000
[  175.743691] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff880244898000
[  175.743708] RBP: ffffc9007bd1b9f0 R08: 0000000000000000 R09: 0000000000000001
[  175.743724] R10: 00000028eaf42792 R11: 0000000000000001 R12: dead000000000100
[  175.743741] R13: dead000000000148 R14: ffffc9007bd1ba5f R15: 0000000000000005
[  175.743758] FS:  00007f2638330700(0000) GS:ffff880256d00000(0000) knlGS:0000000000000000
[  175.743777] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  175.743791] CR2: 00007f885c8cea40 CR3: 00000002416b5000 CR4: 00000000003406e0
[  175.743808] Stack:
[  175.743816]  ffff88024489d248 000000004509ba80 ffff880244898000 ffff88024509ba80
[  175.743840]  00000000ffff8b69 ffffc9007bd1ba5f ffffc9007bd1ba5e ffffc9007bd1ba28
[  175.743863]  ffffffffa01b661d 00000000ffffffff 0000000000000000 ffff880244898000
[  175.743886] Call Trace:
[  175.743906]  [<ffffffffa01b661d>] i915_gem_shrinker_lock_uninterruptible.constprop.5+0x5d/0xc0 [i915]
[  175.743937]  [<ffffffffa01b6cd0>] i915_gem_shrinker_oom+0x30/0x1b0 [i915]
[  175.743955]  [<ffffffff8109ca79>] notifier_call_chain+0x49/0x70
[  175.743971]  [<ffffffff8109cd9d>] __blocking_notifier_call_chain+0x4d/0x70
[  175.743988]  [<ffffffff8109cdd6>] blocking_notifier_call_chain+0x16/0x20
[  175.744005]  [<ffffffff811885dc>] out_of_memory+0x22c/0x480
[  175.744020]  [<ffffffff81205542>] __alloc_pages_slowpath+0x851/0x8ec
[  175.744037]  [<ffffffff8118ca51>] __alloc_pages_nodemask+0x2c1/0x310
[  175.744054]  [<ffffffff811d8ea8>] alloc_pages_current+0x88/0x120
[  175.744070]  [<ffffffff811833a4>] __page_cache_alloc+0xb4/0xc0
[  175.744086]  [<ffffffff811865ca>] filemap_fault+0x29a/0x500
[  175.744101]  [<ffffffff81299aa6>] ext4_filemap_fault+0x36/0x50
[  175.744117]  [<ffffffff811b3d4a>] __do_fault+0x6a/0xe0
[  175.744131]  [<ffffffff811b97ee>] handle_mm_fault+0xd0e/0x1330
[  175.744147]  [<ffffffff8106738c>] __do_page_fault+0x23c/0x4d0
[  175.744162]  [<ffffffff81067650>] do_page_fault+0x30/0x80
[  175.744177]  [<ffffffff817ffbe8>] page_fault+0x28/0x30
[  175.744191] Code: 41 57 41 56 41 55 41 54 53 48 83 ec 10 4c 8b a7 48 52 00 00 89 75 d4 48 89 45 c8 49 39 c4 74 78 4d 8d 6c 24 48 41 bf 05 00 00 00 <49> 8b 5d 00 48 85 db 74 50 8b 83 20 01 00 00 85 c0 74 15 48 8b
[  175.744320] RIP  [<ffffffffa01af29b>] i915_gem_wait_for_idle+0x3b/0x140 [i915]
[  175.744351]  RSP <ffffc9007bd1b9b8>

Fixes: 80b204bce8 ("drm/i915: Enable multiple timelines")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161111145809.9701-1-chris@chris-wilson.co.uk
2016-11-11 16:21:52 +00:00
..
gvt drm/i915/gvt: add KVMGT support 2016-11-10 15:45:39 +08: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: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_debugfs.c drm/i915: Remove two sloppy inline functions from .h 2016-11-08 12:36:35 +02:00
i915_drv.c drm/i915: Convert i915_drv.c to INTEL_GEN 2016-11-11 14:58:27 +00:00
i915_drv.h drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem_batch_pool.c drm/i915: Move GEM activity tracking into a common struct reservation_object 2016-10-28 20:53:50 +01:00
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Export a function to flush the context upon pinning 2016-11-01 14:26:33 +00:00
i915_gem_dmabuf.c drm/i915: Move GEM activity tracking into a common struct reservation_object 2016-10-28 20:53:50 +01:00
i915_gem_evict.c drm/i915: Enable multiple timelines 2016-10-28 20:53:57 +01:00
i915_gem_execbuffer.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem_fence_reg.c drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_fence_reg.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_gtt.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
i915_gem_gtt.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_internal.c drm/i915: Allow shrinking of userptr objects once again 2016-11-01 16:35:26 +00:00
i915_gem_object.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_render_state.c drm/i915: Introduce HAS_64BIT_RELOC 2016-11-03 12:45:57 +02:00
i915_gem_render_state.h drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
i915_gem_request.c drm/i915: Spin until breadcrumb threads are complete 2016-11-09 15:01:52 +00:00
i915_gem_request.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_shrinker.c drm/i915: Unify global_list into global_link 2016-11-02 15:17:13 +02:00
i915_gem_stolen.c drm/i915: Assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem_tiling.c drm/i915: Fix pages pin counting around swizzle quirk 2016-11-04 11:55:39 +00:00
i915_gem_timeline.c drm/i915: Enable multiple timelines 2016-10-28 20:53:57 +01:00
i915_gem_timeline.h drm/i915: Enable multiple timelines 2016-10-28 20:53:57 +01:00
i915_gem_userptr.c drm/i915: Assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem.c drm/i915: Only wait upon the execution timeline when unlocked 2016-11-11 16:21:52 +00:00
i915_gem.h drm/i915: avoid harmless empty-body warning 2016-11-08 17:33:47 +01:00
i915_gpu_error.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/guc: Cache the client mapping 2016-11-03 19:57:43 +00:00
i915_ioc32.c
i915_irq.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_memcpy.c
i915_mm.c
i915_params.c
i915_params.h
i915_pci.c drm/i915: Introduce HAS_64BIT_RELOC 2016-11-03 12:45:57 +02:00
i915_pvinfo.h
i915_reg.h drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
i915_suspend.c drm/i915: Make IS_GEN macros only take dev_priv 2016-10-14 12:23:22 +01:00
i915_sw_fence.c drm/i915: Allow i915_sw_fence_await_sw_fence() to allocate 2016-10-28 20:53:42 +01:00
i915_sw_fence.h drm/i915: Allow i915_sw_fence_await_sw_fence() to allocate 2016-10-28 20:53:42 +01:00
i915_sysfs.c
i915_trace_points.c
i915_trace.h drm/i915: Introduce a global_seqno for each request 2016-10-28 20:53:53 +01:00
i915_vgpu.c
i915_vgpu.h
i915_vma.c drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_vma.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Move GEM activity tracking into a common struct reservation_object 2016-10-28 20:53:50 +01:00
intel_atomic.c
intel_audio.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_bios.c drm/i915: Clean up DDI DDC/AUX CH sanitation 2016-10-21 15:43:40 +03:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Spin until breadcrumb threads are complete 2016-11-09 15:01:52 +00:00
intel_color.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
intel_crt.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_csr.c drm/i915/DMC/KBL: Load DMC on KBL using the no_stepping_info array 2016-10-26 14:20:53 -07:00
intel_ddi.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_device_info.c drm/i915: Don't try to initialize sprite planes on pre-ilk 2016-10-31 16:56:32 +02:00
intel_display.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
intel_dp_aux_backlight.c
intel_dp_link_training.c
intel_dp_mst.c
intel_dp.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_dpio_phy.c drm/i915/bxt: Don't set OCL2_LDOFUSE_PWR_DIS bit in phy init sequence 2016-11-02 09:35:47 +02:00
intel_dpll_mgr.c drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915: Make IS_BROXTON only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dsi.c drm/i915: Make IS_CHERRYVIEW only take dev_priv 2016-10-14 12:23:19 +01:00
intel_dsi.h
intel_dvo.c drm/i915: Pass dev_priv to intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_engine_cs.c drm/i915: Move hangcheck code out from i915_irq.c 2016-11-02 11:59:10 +02:00
intel_fbc.c drm/i915: Pass intel_crtc to intel_crtc_active() 2016-11-01 16:40:38 +02:00
intel_fbdev.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
intel_fifo_underrun.c drm/i915: Always use intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc_fwif.h drm/i915: Increase GuC log buffer size to reduce flush interrupts 2016-10-25 09:34:23 +01:00
intel_guc_loader.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_guc.h drm/i915/guc: Cache the client mapping 2016-11-03 19:57:43 +00:00
intel_gvt.c Documentation/gpu: Add section for Intel GVT-g host support 2016-10-20 17:18:39 +08:00
intel_gvt.h drm/i915/gvt: clean up intel_gvt.h as interface for i915 core 2016-10-20 17:18:30 +08:00
intel_hangcheck.c drm/i915: Move hangcheck code out from i915_irq.c 2016-11-02 11:59:10 +02:00
intel_hdmi.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_hotplug.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_i2c.c drm/i915: GMBUS don't need no forcewake 2016-10-17 14:26:42 +03:00
intel_lrc.c drm/i915: Make sure engines are idle during GPU idling in LR mode 2016-11-07 14:48:05 +02:00
intel_lrc.h drm/i915: Make sure engines are idle during GPU idling in LR mode 2016-11-07 14:48:05 +02:00
intel_lspcon.c drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_lvds.c drm/i915: Pass dev_priv to intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_mocs.c
intel_mocs.h
intel_modes.c
intel_opregion.c
intel_overlay.c drm/i915: Use lockless object free 2016-10-28 20:53:50 +01:00
intel_panel.c
intel_pm.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
intel_psr.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +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: Export a function to flush the context upon pinning 2016-11-01 14:26:33 +00:00
intel_ringbuffer.h drm/i915: Spin until breadcrumb threads are complete 2016-11-09 15:01:52 +00:00
intel_runtime_pm.c drm/i915: Pass dev_priv to .get_display_clock_speed() 2016-11-01 16:40:38 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Pass dev_priv to IS_MOBILE() 2016-11-01 16:40:38 +02:00
intel_sideband.c
intel_sprite.c drm/i915: Grab the rotation from the passed plane state for VLV sprites 2016-11-08 15:38:25 +02:00
intel_tv.c drm/i915: Pass dev_priv to intel_wait_for_vblank() 2016-11-01 16:40:38 +02:00
intel_uncore.c
intel_vbt_defs.h
Kconfig drm/i915/gvt: add KVMGT support 2016-11-10 15:45:39 +08:00
Kconfig.debug
Makefile drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00