linux_dsm_epyc7002/drivers/gpu/drm
Chris Wilson e9135c4f08 drm/i915: Prevent machine death on Ivybridge context switching
Two concurrent writes into the same register cacheline has the chance of
killing the machine on Ivybridge and other gen7. This includes LRI
emitted from the command parser.  The MI_SET_CONTEXT itself serves as
serialising barrier and prevents the pair of register writes in the first
packet from triggering the fault.  However, if a second switch-context
immediately occurs then we may have two adjacent blocks of LRI to the
same registers which may then trigger the hang. To counteract this we
need to insert a delay after the second register write using SRM.

This is easiest to reproduce with something like
igt/gem_ctx_switch/interruptible that triggers back-to-back context
switches (with no operations in between them in the command stream,
which requires the execbuf operation to be interrupted after the
MI_SET_CONTEXT) but can be observed sporadically elsewhere when running
interruptible igt. No reports from the wild though, so it must be of low
enough frequency that no one has correlated the random machine freezes
with i915.ko

The issue was introduced with
commit 2c55018347 [v3.19]
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Dec 16 10:02:27 2014 +0000

    drm/i915: Disable PSMI sleep messages on all rings around context switches

Testcase: igt/gem_ctx_switch/render-interruptible #ivb
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Daniel Vetter <daniel@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1460565315-7748-11-git-send-email-chris@chris-wilson.co.uk
2016-04-14 10:45:40 +01:00
..
amd Merge branch 'drm-fixes-4.6' of git://people.freedesktop.org/~agd5f/linux into drm-fixes 2016-04-07 07:08:46 +10:00
arm drm: ARM HDLCD - fix an error code 2016-04-04 10:11:33 +01:00
armada mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
ast Merge tag 'topic/drm-misc-2016-03-14' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-03-16 11:09:26 +10:00
atmel-hlcdc drm/atmel-hlcdc: use helper to get crtc state 2016-03-15 14:09:48 +01:00
bochs Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
bridge drm/bridge: removed dummy mode_fixup function from dw-hdmi. 2016-02-11 09:24:01 +01:00
cirrus Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
etnaviv Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
exynos drm/exynos: add DRM_EXYNOS_GEM_MAP ioctl 2016-03-13 14:54:03 +09:00
fsl-dcu drm/fsl-dcu: removed optional dummy crtc mode_fixup function. 2016-03-04 18:16:45 +01:00
gma500 gma500: remove annoying deprecation warning 2016-04-04 12:38:46 -07:00
i2c Merge drm-fixes into drm-next. 2016-03-14 09:46:02 +10:00
i810
i915 drm/i915: Prevent machine death on Ivybridge context switching 2016-04-14 10:45:40 +01:00
imx drm/imx: Don't set a gamma table size 2016-03-31 11:24:37 +02:00
mga
mgag200 drm/mgag200: removed optional dummy crtc mode_fixup function. 2016-03-04 17:54:17 +01:00
msm drm/msm: fix typo in the !COMMON_CLK case 2016-03-23 18:15:49 -04:00
nouveau Merge branch 'linux-4.6' of git://github.com/skeggsb/linux into drm-fixes 2016-04-06 16:16:52 +10:00
omapdrm Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-25 08:48:31 -07:00
panel drm/panel: Changes for v4.6-rc1 2016-03-17 08:09:44 +10:00
qxl Merge drm-fixes into drm-next. 2016-03-14 09:46:02 +10:00
r128
radeon Merge branch 'drm-fixes-4.6' of git://people.freedesktop.org/~agd5f/linux into drm-fixes 2016-04-07 07:08:46 +10:00
rcar-du drm/rcar-du: removed optional dummy crtc mode_fixup function. 2016-03-04 17:58:47 +01:00
rockchip drm/rockchip: dw_hdmi: Don't call platform_set_drvdata() 2016-03-28 14:48:32 +08:00
savage
shmobile drm/shmobile: removed optional dummy crtc mode_fixup function. 2016-03-04 17:59:44 +01:00
sis
sti Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
tdfx
tegra Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
tilcdc drm/tilcdc: Use devm_kzalloc() and devm_kcalloc() for private data 2016-02-25 16:39:47 +02:00
ttm mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
udl drm/udl: Use unlocked gem unreferencing 2016-04-01 13:22:33 +10:00
vc4 Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
vgem
via mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
virtio drm/virtio: removed optional dummy crtc mode_fixup function. 2016-03-04 18:15:38 +01:00
vmwgfx Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2016-03-21 13:48:00 -07:00
ati_pcigart.c
drm_agpsupport.c
drm_atomic_helper.c Merge tag 'topic/drm-misc-2016-03-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-03-24 08:41:59 +10:00
drm_atomic.c Merge tag 'topic/drm-misc-2016-03-22' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-03-24 08:41:59 +10:00
drm_auth.c
drm_bridge.c drm/bridge: Make (pre/post) enable/disable callbacks optional 2016-03-02 17:31:03 +01:00
drm_bufs.c
drm_cache.c
drm_context.c
drm_crtc_helper.c drm: introduce pipe color correction properties 2016-03-08 13:57:32 +01:00
drm_crtc_internal.h
drm_crtc.c Merge tag 'topic/drm-misc-2016-03-14' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-03-16 11:09:26 +10:00
drm_debugfs.c
drm_dma.c
drm_dp_aux_dev.c drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. 2016-02-12 14:22:40 +01:00
drm_dp_helper.c drm/dp: move hw_mutex up the call stack 2016-04-01 13:17:36 +10:00
drm_dp_mst_topology.c Revert "drm/dp/mst: change MST detection scheme" 2016-02-17 14:07:48 +10:00
drm_drv.c
drm_edid_load.c drm/edid: convert to use match_string() helper 2016-03-17 15:09:34 -07:00
drm_edid.c drm/edid: Extract SADs properly from multiple audio data blocks 2016-03-13 19:36:17 +01:00
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c drm/fb_helper: Use add_one_connector in add_all_connectors. 2016-02-15 14:56:46 +01:00
drm_flip_work.c
drm_fops.c
drm_gem_cma_helper.c dma, mm/pat: Rename dma_*_writecombine() to dma_*_wc() 2016-03-09 14:57:51 +01:00
drm_gem.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
drm_global.c
drm_hashtab.c
drm_info.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c
drm_irq.c Merge drm-fixes into drm-next. 2016-03-14 09:46:02 +10:00
drm_kms_helper_common.c drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. 2016-02-12 14:22:40 +01:00
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c drm/dsi: Get DSI host by DT device node 2016-03-02 17:02:54 +01:00
drm_mm.c
drm_modes.c
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c
drm_plane_helper.c
drm_platform.c
drm_prime.c
drm_probe_helper.c
drm_rect.c
drm_scatter.c
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vm.c
drm_vma_manager.c
Kconfig Merge branch 'drm-next-4.6' of git://people.freedesktop.org/~agd5f/linux into drm-next 2016-02-19 11:13:01 +10:00
Makefile Merge tag 'topic/drm-misc-2016-02-18' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-02-19 10:57:44 +10:00