linux_dsm_epyc7002/drivers/gpu/drm/i915
Linus Torvalds 39cb2c9a31 drm/i915: Check for NULL i915_vma in intel_unpin_fb_obj()
I've seen this trigger twice now, where the i915_gem_object_to_ggtt()
call in intel_unpin_fb_obj() returns NULL, resulting in an oops
immediately afterwards as the (inlined) call to i915_vma_unpin_fence()
tries to dereference it.

It seems to be some race condition where the object is going away at
shutdown time, since both times happened when shutting down the X
server.  The call chains were different:

 - VT ioctl(KDSETMODE, KD_TEXT):

    intel_cleanup_plane_fb+0x5b/0xa0 [i915]
    drm_atomic_helper_cleanup_planes+0x6f/0x90 [drm_kms_helper]
    intel_atomic_commit_tail+0x749/0xfe0 [i915]
    intel_atomic_commit+0x3cb/0x4f0 [i915]
    drm_atomic_commit+0x4b/0x50 [drm]
    restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper]
    drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper]
    drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper]
    intel_fbdev_set_par+0x18/0x70 [i915]
    fb_set_var+0x236/0x460
    fbcon_blank+0x30f/0x350
    do_unblank_screen+0xd2/0x1a0
    vt_ioctl+0x507/0x12a0
    tty_ioctl+0x355/0xc30
    do_vfs_ioctl+0xa3/0x5e0
    SyS_ioctl+0x79/0x90
    entry_SYSCALL_64_fastpath+0x13/0x94

 - i915 unpin_work workqueue:

    intel_unpin_work_fn+0x58/0x140 [i915]
    process_one_work+0x1f1/0x480
    worker_thread+0x48/0x4d0
    kthread+0x101/0x140

and this patch purely papers over the issue by adding a NULL pointer
check and a WARN_ON_ONCE() to avoid the oops that would then generally
make the machine unresponsive.

Other callers of i915_gem_object_to_ggtt() seem to also check for the
returned pointer being NULL and warn about it, so this clearly has
happened before in other places.

[ Reported it originally to the i915 developers on Jan 8, applying the
  ugly workaround on my own now after triggering the problem for the
  second time with no feedback.

  This is likely to be the same bug reported as

     https://bugs.freedesktop.org/show_bug.cgi?id=98829
     https://bugs.freedesktop.org/show_bug.cgi?id=99134

  which has a patch for the underlying problem, but it hasn't gotten to
  me, so I'm applying the workaround. ]

Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-01-29 13:50:06 -08:00
..
gvt drm/i915/gvt: Fix kmem_cache_create() name 2017-01-25 10:28:34 +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 Merge tag 'drm-intel-next-fixes-2016-12-07' of git://anongit.freedesktop.org/git/drm-intel into drm-next 2016-12-08 10:33:26 +10:00
i915_drv.c drm/i915: Don't init hpd polling for vlv and chv from runtime_suspend() 2017-01-25 12:42:36 +02:00
i915_drv.h drm/i915: Move atomic state free from out of fence release 2017-01-25 12:42:58 +02: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 drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_context.c drm/i915: Store the execution priority on the context 2016-11-14 21:01:22 +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: Clear ret before unbinding in i915_gem_evict_something() 2017-01-12 10:15:44 +02:00
i915_gem_execbuffer.c drm/i915: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
i915_gem_fence_reg.c drm/i915: Use dev_priv in INTEL_INFO in i915_gem_fence_reg.c 2016-11-17 13:56:06 +00: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: add i915_address_space_fini 2016-11-17 21:05:36 +00:00
i915_gem_gtt.h drm/i915: dev_priv cleanup in i915_gem_gtt.c 2016-11-17 13:56:12 +00: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: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00: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 Main pull request for drm for 4.10 kernel 2016-12-13 09:35:09 -08:00
i915_gem_request.h drm/i915: Fix oopses in the overlay code due to i915_gem_active stuff 2017-01-03 11:41:17 +02:00
i915_gem_shrinker.c Main pull request for drm for 4.10 kernel 2016-12-13 09:35:09 -08:00
i915_gem_stolen.c drm/i915: skip the first 4k of stolen memory on everything >= gen8 2016-12-20 16:30:55 +02:00
i915_gem_tiling.c drm/i915: dev_priv cleanup in i915_gem_tiling.c 2016-11-17 13:56:20 +00:00
i915_gem_timeline.c drm/i915: Create distinct lockclasses for execution vs user timelines 2016-11-14 21:00:21 +00:00
i915_gem_timeline.h drm/i915: Create distinct lockclasses for execution vs user timelines 2016-11-14 21:00:21 +00:00
i915_gem_userptr.c mm: add locked parameter to get_user_pages_remote() 2016-12-14 16:04:08 -08:00
i915_gem.c drm/i915: Fix phys pwrite for struct_mutex-less operation 2017-01-12 10:15:44 +02: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: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
i915_guc_reg.h drm/i915/guc: general tidying up (loader) 2016-09-15 10:56:02 +01:00
i915_guc_submission.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
i915_ioc32.c
i915_irq.c drm/i915: dev_priv cleanup in i915_irq.c 2016-11-17 13:56:28 +00:00
i915_memcpy.c drm/i915: Mark the static key for movntqda as static 2016-08-17 12:36:07 +01:00
i915_mm.c drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass 2016-08-19 17:13:36 +01:00
i915_params.c drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
i915_params.h drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
i915_pci.c drm/i915/bxt: Broxton decoupled MMIO 2016-11-16 09:33:10 +00:00
i915_pvinfo.h
i915_reg.h drm/i915/bxt: Broxton decoupled MMIO 2016-11-16 09:33:10 +00:00
i915_suspend.c drm/i915: dev_priv cleanup in i915_suspend.c 2016-11-17 13:56:31 +00:00
i915_sw_fence.c drm/i915: Give each sw_fence its own lockclass 2016-11-14 21:00:20 +00:00
i915_sw_fence.h drm/i915: Hold a reference on the request for its fence chain 2016-12-05 11:00:32 +02:00
i915_sysfs.c drm/i915: Fix setting of boost freq tunable 2016-12-20 16:29:48 +02:00
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 Merge tag 'drm-intel-next-2016-09-19' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-09-20 06:23:22 +10:00
i915_vgpu.h
i915_vma.c drm/i915: reinstate call to trace_i915_vma_bind 2017-01-25 12:57:22 +02:00
i915_vma.h drm/i915: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
intel_acpi.c
intel_atomic_plane.c Merge tag 'drm-misc-next-2016-11-29' of git://anongit.freedesktop.org/git/drm-misc into drm-next 2016-11-30 14:28:20 +10:00
intel_atomic.c
intel_audio.c drm/i915/audio: fix hdmi audio noise issue 2016-12-05 11:00:31 +02:00
intel_bios.c drm/i915: Assume non-DP++ port if dvo_port is HDMI and there's no AUX ch specified in the VBT 2016-11-16 10:06:14 +02:00
intel_bios.h drm/i915/dsi: Fix swapping of MIPI_SEQ_DEASSERT_RESET / MIPI_SEQ_ASSERT_RESET 2016-12-20 16:28:25 +02:00
intel_breadcrumbs.c drm/i915: Spin until breadcrumb threads are complete 2016-11-09 15:01:52 +00:00
intel_color.c drm/i915: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_crt.c drm/i915: Don't leak edid in intel_crt_detect_ddc() 2017-01-25 12:42:30 +02: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: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00: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: Check for NULL i915_vma in intel_unpin_fb_obj() 2017-01-29 13:50:06 -08:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/skl: drop workarounds for A0 and B0 revisions 2016-09-26 12:08:22 +03:00
intel_dp_mst.c drm/i915: Kill dp_encoder_is_mst 2016-11-14 20:27:54 +02:00
intel_dp.c drm/i915: Force VDD off on the new power seqeuencer before starting to use it 2017-01-03 11:36:11 +02: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: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_dpll_mgr.h drm/i915/dp: Add a standalone function to obtain shared dpll for HSW/BDW/SKL/BXT 2016-09-09 14:53:18 -07:00
intel_drv.h drm/i915: Move atomic state free from out of fence release 2017-01-25 12:42:58 +02:00
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c drm/i915/dsi: Fix chv_exec_gpio disabling the GPIOs it is setting 2016-12-20 16:28:38 +02:00
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: Make the connector .detect() callback optional 2016-12-01 10:05:53 -05: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/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
intel_fbc.c drm/i915/fbc: convert intel_fbc.c to use INTEL_GEN() 2016-11-14 14:00:29 -02:00
intel_fbdev.c drm/i915: prevent crash with .disable_display parameter 2017-01-25 12:42:16 +02: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 drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_frontbuffer.h drm/i915: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
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: Remove WaDisableLSQCROPERFforOCL KBL workaround. 2017-01-18 16:31:11 +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: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_mocs.c
intel_mocs.h
intel_modes.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
intel_opregion.c drm/i915/opregion: fill in the CADL from connector list, not DIDL 2016-11-17 12:45:59 +02:00
intel_overlay.c drm/i915: Fix oops in overlay due to frontbuffer tracking 2017-01-03 11:41:28 +02:00
intel_panel.c drm/i915: Introduce enableddisabled helper 2016-11-17 15:00:36 +00:00
intel_pm.c Merge tag 'drm-intel-next-fixes-2016-12-22' of git://anongit.freedesktop.org/git/drm-intel into drm-fixes 2016-12-23 05:28:02 +10:00
intel_psr.c drm/i915: disable PSR by default on HSW/BDW 2016-12-20 16:30:09 +02: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: Remove WaDisableLSQCROPERFforOCL KBL workaround. 2017-01-18 16:31:11 +02:00
intel_ringbuffer.h drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
intel_runtime_pm.c drm/i915/dsi: Do not clear DPOUNIT_CLOCK_GATE_DISABLE from vlv_init_display_clock_gating 2016-12-20 16:27:46 +02:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_sideband.c
intel_sprite.c Merge tag 'drm-misc-next-2016-11-29' of git://anongit.freedesktop.org/git/drm-misc into drm-next 2016-11-30 14:28:20 +10:00
intel_tv.c drm/i915: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_uncore.c ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
intel_vbt_defs.h drm/i915: Assume non-DP++ port if dvo_port is HDMI and there's no AUX ch specified in the VBT 2016-11-16 10:06:14 +02:00
Kconfig drm/i915/gvt/kvmgt: add vfio/mdev support to KVMGT 2016-12-16 16:55:26 +08:00
Kconfig.debug drm/i915: Restrict DRM_DEBUG_MM automatic selection 2016-11-09 02:13:48 +01:00
Makefile drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00