OpenCloudOS-Kernel/drivers/gpu/drm/i915
Chris Wilson aa9b78104f drm/i915: Late request cancellations are harmful
Conceptually, each request is a record of a hardware transaction - we
build up a list of pending commands and then either commit them to
hardware, or cancel them. However, whilst building up the list of
pending commands, we may modify state outside of the request and make
references to the pending request. If we do so and then cancel that
request, external objects then point to the deleted request leading to
both graphical and memory corruption.

The easiest example is to consider object/VMA tracking. When we mark an
object as active in a request, we store a pointer to this, the most
recent request, in the object. Then we want to free that object, we wait
for the most recent request to be idle before proceeding (otherwise the
hardware will write to pages now owned by the system, or we will attempt
to read from those pages before the hardware is finished writing). If
the request was cancelled instead, that wait completes immediately. As a
result, all requests must be committed and not cancelled if the external
state is unknown.

All that remains of i915_gem_request_cancel() users are just a couple of
extremely unlikely allocation failures, so remove the API entirely.

A consequence of committing all incomplete requests is that we generate
excess breadcrumbs and fill the ring much more often with dummy work. We
have completely undone the outstanding_last_seqno optimisation.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93907
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1460565315-7748-16-git-send-email-chris@chris-wilson.co.uk
2016-04-14 10:45:40 +01:00
..
Kconfig drm/i915: Kconfig for extra driver debugging 2016-03-03 17:26:57 +00:00
Kconfig.debug drm/i915: Add GEM debugging Kconfig option 2016-04-14 10:45:40 +01:00
Makefile drm/i915: Force clean compilation with -Werror 2016-04-14 10:45:40 +01:00
dvo.h drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7xxx.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7017.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ivch.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ns2501.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_sil164.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_tfp410.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
i915_cmd_parser.c drm/i915: Bump command parser version for new whitelisted registers 2016-03-21 10:03:26 +01:00
i915_debugfs.c drm/i915: Tighten reset_counter for reset status 2016-04-14 10:45:40 +01:00
i915_dma.c Revert "drm/i915: Fix races on fbdev" 2016-04-01 15:03:55 +03:00
i915_drv.c drm/i915: Suppress error message when GPU resets are disabled 2016-04-14 10:45:40 +01:00
i915_drv.h drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
i915_gem.c drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
i915_gem.h drm/i915: Add GEM debugging Kconfig option 2016-04-14 10:45:40 +01:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Reorganise legacy context switch to cope with late failure 2016-04-14 10:45:40 +01:00
i915_gem_debug.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_dmabuf.c Linux 4.6-rc3 2016-04-11 19:25:13 +02:00
i915_gem_evict.c drm/i915: Rename vma->*_list to *_link for consistency 2016-02-26 13:15:39 +00:00
i915_gem_execbuffer.c drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
i915_gem_fence.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2016-03-17 21:38:27 -07:00
i915_gem_gtt.c drm/i915: Store and use edram capabilities 2016-04-14 12:27:37 +03:00
i915_gem_gtt.h drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_gem_render_state.c drm/i915: Rename intel_engine_cs struct members 2016-03-16 15:33:17 +00:00
i915_gem_render_state.h drm/i915: Rename intel_engine_cs function parameters 2016-03-16 15:33:10 +00:00
i915_gem_shrinker.c drm/i915/shrinker: Restrict vmap purge to objects with vmaps 2016-04-11 17:12:16 +01:00
i915_gem_stolen.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_gem_tiling.c drm/i915: get runtime PM reference around GEM set_tiling IOCTL 2015-11-17 18:43:30 +02:00
i915_gem_userptr.c drm/i915: Prevent leaking of -EIO from i915_wait_request() 2016-04-14 10:45:40 +01:00
i915_gpu_error.c drm/i915: Separate out the seqno-barrier from engine->get_seqno 2016-04-09 12:09:05 +01:00
i915_guc_reg.h drm/i915/guc: always reset GuC before loading firmware 2016-04-05 13:29:24 +01:00
i915_guc_submission.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_ioc32.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_irq.c drm/i915: Tighten reset_counter for reset status 2016-04-14 10:45:40 +01:00
i915_params.c drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_params.h drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_reg.h drm/i915: Calculate edram size 2016-04-14 12:27:37 +03:00
i915_suspend.c drm/i915/bxt: Don't save/restore eDP panel power during suspend (v3) 2016-02-08 11:32:32 +02:00
i915_sysfs.c drm/i915: Hold RPM reference while setting freq limits through sysfs 2016-03-02 18:50:47 +02:00
i915_trace.h drm/i915: Separate out the seqno-barrier from engine->get_seqno 2016-04-09 12:09:05 +01:00
i915_trace_points.c
i915_vgpu.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_vgpu.h drm/i915: Type safe register read/write 2015-11-18 15:39:11 +02:00
intel_acpi.c drm/i915: Drop unnecessary #include <linux/vga_switcheroo.h> 2015-10-13 10:18:38 +02:00
intel_atomic.c drm/i915: Remove some post-commit members from intel_crtc->atomic, v3. 2016-03-16 14:50:25 +01:00
intel_atomic_plane.c drm/i915: Pass the correct crtc state to .update_plane() 2016-03-10 13:49:31 +02:00
intel_audio.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_bios.c drm/i915: Get panel_type from OpRegion panel details 2016-04-12 13:23:43 +03:00
intel_bios.h drm/i915: hide away VBT private data in a separate header 2016-03-17 11:58:57 +02:00
intel_color.c drm/i915: Do not check crtc_state->active in intel_color_load_luts. 2016-03-31 12:46:07 +02:00
intel_crt.c drm/i915: Move HSW/BDW pll selection logic to intel_dpll_mgr.c 2016-03-09 11:55:31 +02:00
intel_csr.c drm/i915/csr: Allow matching unknown HW steppings with generic firmware 2016-03-16 17:53:00 +02:00
intel_ddi.c drm/i915/ddi: Silence compiler warning for unknown output type 2016-04-04 08:25:52 +01:00
intel_display.c drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
intel_dp.c drm/i915: Replace ILK eDP underrun suppression with something better 2016-04-12 19:02:21 +03:00
intel_dp_link_training.c drm/i915/dp: reduce missing TPS3 support errors to debug logging 2016-02-08 11:37:17 +02:00
intel_dp_mst.c drm/i915: Fix race condition in intel_dp_destroy_mst_connector() 2016-03-17 09:12:28 +01:00
intel_dpll_mgr.c drm/i915/bxt: Reversed polarity of PORT_PLL_REF_SEL bit 2016-04-11 13:02:23 +03:00
intel_dpll_mgr.h drm/i915: Use a crtc mask instead of a refcount for dpll functions, v2. 2016-03-17 09:27:28 +01:00
intel_drv.h drm/i915: Use GPLL ref clock to calculate GPU freqs on VLV/CHV 2016-04-05 21:17:39 +03:00
intel_dsi.c drm/i915: Power down the DSI PLL before reconfiguring it 2016-04-12 21:11:51 +03:00
intel_dsi.h drm/i915: Sharing the pixel_format_from_vbt to whole i915 2016-04-07 16:46:06 +03:00
intel_dsi_panel_vbt.c drm/i915: Sharing the pixel_format_from_vbt to whole i915 2016-04-07 16:46:06 +03:00
intel_dsi_pll.c drm/i915: Fix CHV DSI PLL refclk during state readout 2016-04-12 21:12:02 +03:00
intel_dvo.c drm: Pass 'name' to drm_encoder_init() 2015-12-11 09:13:20 +01:00
intel_fbc.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
intel_fbdev.c Revert "drm/i915: Fix races on fbdev" 2016-04-01 15:03:55 +03:00
intel_fifo_underrun.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_frontbuffer.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_guc.h drm/i915: Disentangle i915_drv.h includes 2016-04-14 10:45:40 +01:00
intel_guc_fwif.h drm/i915/guc: Decouple GuC engine id from ring id 2016-01-25 10:56:30 +00:00
intel_guc_loader.c drm/i915/guc: always reset GuC before loading firmware 2016-04-05 13:29:24 +01:00
intel_hdmi.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_hotplug.c drm/i915: intel_hpd_init(): Fix suspend/resume reprobing 2016-01-13 10:49:42 +02:00
intel_i2c.c drm/i915: Make GMBUS timeout message DRM_DEBUG_KMS 2016-04-12 13:23:17 +03:00
intel_lrc.c drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
intel_lrc.h drm/i915: Disentangle i915_drv.h includes 2016-04-14 10:45:40 +01:00
intel_lvds.c drm/i915: fix deadlock on lid open 2016-03-30 12:17:13 +02:00
intel_mocs.c drm/i915: introduce for_each_engine_id() 2016-03-24 14:34:06 +00:00
intel_mocs.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_modes.c drm/i915: Add HDMI aspect ratio property for SDVO 2015-09-30 10:20:12 +02:00
intel_opregion.c drm/i915/opregion: remove unnecessary ifdefs on CONFIG_ACPI 2016-04-13 15:54:29 +03:00
intel_overlay.c drm/i915: Late request cancellations are harmful 2016-04-14 10:45:40 +01:00
intel_panel.c drm/i915/panel: setup pwm backlight based on connector type 2016-03-16 18:28:50 +02:00
intel_pm.c drm/i915: Move vlv_init_display_clock_gating() to the display power well 2016-04-12 19:09:07 +03:00
intel_psr.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_renderstate.h
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_ringbuffer.c drm/i915: Force ringbuffers to not be at offset 0 2016-04-14 10:45:40 +01:00
intel_ringbuffer.h drm/i915: Only grab correct forcewake for the engine with execlists 2016-04-12 15:35:22 +01:00
intel_runtime_pm.c drm/i915: Move vlv_init_display_clock_gating() to the display power well 2016-04-12 19:09:07 +03:00
intel_sdvo.c drm/i915: move sdvo mappings to vbt data 2016-03-29 15:12:30 +03:00
intel_sdvo_regs.h drm/i915/sdvo: revert bogus kernel-doc comments to normal comments 2016-01-20 10:21:34 +02:00
intel_sideband.c drm/i915: Extend gpio read/write to other cores 2016-02-04 19:11:17 +02:00
intel_sprite.c drm/i915: Fix plane init failure paths 2016-04-01 23:24:21 +03:00
intel_tv.c drm/i915: move VBT based TV presence check to intel_bios.c 2016-03-16 18:28:07 +02:00
intel_uncore.c drm/i915: Calculate edram size 2016-04-14 12:27:37 +03:00
intel_vbt_defs.h drm/i915: Update VBT fields for child devices 2016-04-06 14:10:15 +03:00