linux/drivers/gpu/drm/i915
Chris Wilson 221fe79945 drm/i915: Perform a direct reset of the GPU from the waiter
If a waiter is holding the struct_mutex, then the reset worker cannot
reset the GPU until the waiter returns. We do not want to return -EAGAIN
form i915_wait_request as that breaks delicate operations like
i915_vma_unbind() which often cannot be restarted easily, and returning
-EIO is just as useless (and has in the past proven dangerous). The
remaining WARN_ON(i915_wait_request) serve as a valuable reminder that
handling errors from an indefinite wait are tricky.

We can keep the current semantic that knowing after a reset is complete,
so is the request, by performing the reset ourselves if we hold the
mutex.

uevent emission is still handled by the reset worker, so it may appear
slightly out of order with respect to the actual reset (and concurrent
use of the device).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160909131201.16673-11-chris@chris-wilson.co.uk
2016-09-09 14:23:04 +01:00
..
gvt drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01: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/cmdparser: Accelerate copies from WC memory 2016-08-18 22:37:01 +01:00
i915_debugfs.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_drv.c drm/i915: Perform a direct reset of the GPU from the waiter 2016-09-09 14:23:04 +01:00
i915_drv.h drm/i915: Perform a direct reset of the GPU from the waiter 2016-09-09 14:23:04 +01:00
i915_gem_batch_pool.c drm/i915: Double check the active status on the batch pool 2016-08-04 20:19: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: Move debug only per-request pid tracking from request to ctx 2016-08-15 11:01:15 +01:00
i915_gem_dmabuf.c drm/i915: Support for creating write combined type vmaps 2016-08-12 13:06:36 +01:00
i915_gem_dmabuf.h drm/i915: Serialise presentation with imported dmabufs 2016-06-17 10:32:26 +01:00
i915_gem_evict.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_execbuffer.c drm/i915: Use atomic for dev_priv->mm.bsd_engine_dispatch_index 2016-09-01 15:39:25 +03:00
i915_gem_fence.c drm/i915: Flush delayed fence releases after reset 2016-08-19 16:59:22 +01:00
i915_gem_gtt.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_gtt.h drm/i915: Embed the scratch page struct into each VM 2016-08-22 12:19:52 +01:00
i915_gem_render_state.c drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_render_state.h drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_request.c drm/i915: Perform a direct reset of the GPU from the waiter 2016-09-09 14:23:04 +01:00
i915_gem_request.h drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_shrinker.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_stolen.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
i915_gem_tiling.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_gem_userptr.c drm/i915: Expand bool interruptible to pass flags to i915_wait_request() 2016-09-09 14:23:03 +01:00
i915_gem.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem.h
i915_gpu_error.c drm/i915: Make HWS_NEEDS_PHYSICAL the exception 2016-09-07 16:07:09 -07:00
i915_guc_reg.h drm/i915/bxt: reserve space for RC6 in the the GuC WOPCM 2016-05-18 12:49:19 +01:00
i915_guc_submission.c drm/i915/guc: downgrade some DRM_ERROR() messages to DRM_WARN() 2016-09-05 16:05:01 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Perform a direct reset of the GPU from the waiter 2016-09-09 14:23:04 +01: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: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_params.h drm/i915: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_pci.c drm/i915: Move HAS_GUC definition to platform definition 2016-09-07 16:07:09 -07:00
i915_pvinfo.h drm/i915: Use offsetof() to calculate the offset of members in PVINFO page 2016-06-17 19:44:25 +01:00
i915_reg.h drm/i915/skl: Add support for the SAGV, fix underrun hangs 2016-08-22 12:54:41 +02:00
i915_suspend.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
i915_sw_fence.c drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sw_fence.h drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sysfs.c drm/i915: Drop mutex around clearing error state 2016-09-02 08:32:55 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Remove surplus drm_device parameter to i915_gem_evict_something() 2016-08-04 20:19:50 +01:00
i915_vgpu.c drm/i915: enable vGPU detection for all 2016-09-06 16:39:36 +03:00
i915_vgpu.h drm/i915: Fold vGPU active check into inner functions 2016-06-17 19:44:29 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Use drm_plane_helper_check_state() 2016-08-08 14:19:56 -04:00
intel_atomic.c drm: Consolidate plane arrays in drm_atomic_state 2016-06-02 17:20:25 +02:00
intel_audio.c drm/i915: Eliminate redundant local variable definition 2016-08-24 08:49:49 -07:00
intel_bios.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Use RCU to annotate and enforce protection for breadcrumb's bh 2016-08-10 10:37:49 +01:00
intel_color.c drm/i915: Use more atomic state in intel_color.c 2016-08-23 11:58:56 +02:00
intel_crt.c drm/i915: Cleanup crt disable sequence on hsw+ 2016-08-24 09:49:10 +02:00
intel_csr.c drm/i915: Fix botched merge that downgrades CSR versions. 2016-08-22 12:54:50 +02:00
intel_ddi.c drm/i915: Split intel_ddi_pre_enable() into DP and HDMI versions 2016-09-07 13:55:33 -07:00
intel_device_info.c drm/i915: sseu: Add debug printf for slice/subslice masks 2016-09-02 18:17:52 +03:00
intel_display.c drm/i915: Expand bool interruptible to pass flags to i915_wait_request() 2016-09-09 14:23:03 +01:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/dp: Dump DP link status when link training stages fail 2016-08-24 08:49:27 -07:00
intel_dp_mst.c drm/i915: Remove ddi_pll_sel from intel_crtc_state 2016-09-07 13:55:33 -07:00
intel_dp.c drm/i915: Don't pass crtc_state to intel_dp_set_link_params() 2016-09-07 13:55:33 -07:00
intel_dpio_phy.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dpll_mgr.c drm/i915: Split hsw_get_dpll() 2016-09-07 13:55:33 -07:00
intel_dpll_mgr.h drm/i915: Split hsw_get_dpll() 2016-09-07 13:55:33 -07:00
intel_drv.h drm/i915: Separate out reset flags from the reset counter 2016-09-09 14:23:02 +01:00
intel_dsi_dcs_backlight.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_panel_vbt.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_pll.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi.c drm/i915: Convert intel_dsi to use atomic state 2016-08-23 11:21:39 +02:00
intel_dsi.h drm/i915/dsi: CABC support for Panel PWM backlight control 2016-05-17 16:12:39 +03:00
intel_dvo.c drm/i915/dvo: Remove dangling call to drm_encoder_cleanup() 2016-08-24 14:54:01 +03:00
intel_engine_cs.c drm/i915/cmdparser: Make initialisation failure non-fatal 2016-08-18 22:36:58 +01:00
intel_fbc.c Revert "drm/i915/fbc: Allow on unfenced surfaces, for recent gen" 2016-08-24 19:32:35 +01:00
intel_fbdev.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
intel_fifo_underrun.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01: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: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_guc_fwif.h drm/i915/guc: rework guc_add_workqueue_item() 2016-05-23 14:21:53 +01:00
intel_guc_loader.c drm/i915/guc: revisit GuC loader message levels 2016-09-05 16:05:01 +01:00
intel_guc.h drm/i915: Track pinned vma inside guc 2016-08-15 11:00:58 +01:00
intel_gvt.c drm/i915/gvt: Mark i915.enable_gvt as false if loading fails 2016-06-21 12:40:13 +01:00
intel_gvt.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
intel_hdmi.c Revert "drm/i915: Check live status before reading edid" 2016-09-07 14:53:31 +03:00
intel_hotplug.c drm/i915: Mark i915_hpd_poll_init_work as static 2016-08-17 12:36:15 +01:00
intel_i2c.c drm/i915: Take forcewake once for the entire GMBUS transaction 2016-08-22 18:42:44 +01:00
intel_lrc.c drm/i915: Simplify ELSP queue request tracking 2016-09-09 14:23:01 +01:00
intel_lrc.h drm/i915: Simplify ELSP queue request tracking 2016-09-09 14:23:01 +01:00
intel_lvds.c drm/i915: Convert intel_lvds to use atomic state 2016-08-23 11:29:45 +02:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
intel_opregion.c Linux 4.7 2016-07-26 17:26:29 +10:00
intel_overlay.c drm/i915: Embed the io-mapping struct inside drm_i915_private 2016-08-19 17:13:35 +01:00
intel_panel.c drm/i915/backlight: handle enabled but zero duty cycle at module load 2016-08-29 13:59:05 +02:00
intel_pm.c drm/i915: Drop local struct_mutex around intel_init_emon[ilk] 2016-09-09 14:23:02 +01:00
intel_psr.c Merge tag 'drm-intel-next-2016-08-08' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:53:57 +10:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
intel_ringbuffer.c drm/i915: Perform a direct reset of the GPU from the waiter 2016-09-09 14:23:04 +01:00
intel_ringbuffer.h drm/i915: Expand bool interruptible to pass flags to i915_wait_request() 2016-09-09 14:23:03 +01:00
intel_runtime_pm.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Convert intel_sdvo to use atomic state 2016-08-23 11:21:51 +02:00
intel_sideband.c drm/i915: Convert wait_for(I915_READ(reg)) to intel_wait_for_register() 2016-06-30 15:42:33 +01:00
intel_sprite.c drm/i915/skl: Don't try to update plane watermarks if they haven't changed 2016-09-07 12:29:17 +02:00
intel_tv.c drm/i915: Make encoder->compute_config take the connector state 2016-08-23 11:07:23 +02:00
intel_uncore.c drm/i915: Remove 64b mmio write vfuncs 2016-09-06 17:51:01 +01:00
intel_vbt_defs.h drm/i915: Extract physical display dimensions from VBT 2016-06-10 10:41:15 +03:00
Kconfig drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00