alistair23-linux/drivers/gpu/drm/i915
John Harrison bf7dc5b709 drm/i915: i915_add_request must not fail
The i915_add_request() function is called to keep track of work that has been
written to the ring buffer. It adds epilogue commands to track progress (seqno
updates and such), moves the request structure onto the right list and other
such house keeping tasks. However, the work itself has already been written to
the ring and will get executed whether or not the add request call succeeds. So
no matter what goes wrong, there isn't a whole lot of point in failing the call.

At the moment, this is fine(ish). If the add request does bail early on and not
do the housekeeping, the request will still float around in the
ring->outstanding_lazy_request field and be picked up next time. It means
multiple pieces of work will be tagged as the same request and driver can't
actually wait for the first piece of work until something else has been
submitted. But it all sort of hangs together.

This patch series is all about removing the OLR and guaranteeing that each piece
of work gets its own personal request. That means that there is no more
'hoovering up of forgotten requests'. If the request does not get tracked then
it will be leaked. Thus the add request call _must_ not fail. The previous patch
should have already ensured that it _will_ not fail by removing the potential
for running out of ring space. This patch enforces the rule by actually removing
the early exit paths and the return code.

Note that if something does manage to fail and the epilogue commands don't get
written to the ring, the driver will still hang together. The request will be
added to the tracking lists. And as in the old case, any subsequent work will
generate a new seqno which will suffice for marking the old one as complete.

v2: Improved WARNings (Tomas Elf review request).

For: VIZ-5115
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Tomas Elf <tomas.elf@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2015-06-23 14:01:57 +02:00
..
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c Fix resume from suspend on IBM X30 2015-06-15 12:21:01 +02:00
dvo_ns2501.c drm/i915: Enable dithering on NatSemi DVO2501 for Fujitsu S6010 2015-04-23 21:31:58 +02:00
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c drm/i915: Add SCRATCH1 and ROW_CHICKEN3 to the register whitelist. 2015-06-15 16:00:48 +03:00
i915_debugfs.c drm/i915: unify no_fbc_reason message printing 2015-06-15 18:36:36 +02:00
i915_dma.c drm/i915: Report an error when i915.reset prevents a reset 2015-06-23 14:01:38 +02:00
i915_drv.c drm/i915: Report an error when i915.reset prevents a reset 2015-06-23 14:01:38 +02:00
i915_drv.h drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
i915_gem.c drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
i915_gem_batch_pool.c drm/i915: Split batch pool into size buckets 2015-04-10 08:56:05 +02:00
i915_gem_batch_pool.h drm/i915: Split batch pool into size buckets 2015-04-10 08:56:05 +02:00
i915_gem_context.c drm/i915: add a context parameter to {en, dis}able zero address mapping 2015-05-29 10:15:19 +02:00
i915_gem_debug.c drm/i915: Implement inter-engine read-read optimisations 2015-05-21 15:11:42 +02:00
i915_gem_dmabuf.c dma-buf: cleanup dma_buf_export() to make it easily extensible 2015-04-21 14:47:16 +05:30
i915_gem_evict.c
i915_gem_execbuffer.c drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
i915_gem_gtt.c drm/i915/gtt: Remove _single from page table allocator 2015-06-15 12:13:14 +02:00
i915_gem_gtt.h drm/i915: Add a partial GGTT view type 2015-05-08 13:04:18 +02:00
i915_gem_render_state.c drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
i915_gem_render_state.h
i915_gem_shrinker.c drm/i915: Simplify object is-pinned checking for shrinker 2015-04-10 10:58:34 +02:00
i915_gem_stolen.c drm/i915: use proper FBC base register on all new platforms 2015-04-09 15:57:46 +02:00
i915_gem_tiling.c drm/i915: Simplify i915_gem_obj_is_pinned() test for set-tiling 2015-04-16 11:20:29 +02:00
i915_gem_userptr.c drm/i915: Use uninterruptible mutex_lock for userptr bo creation 2015-05-20 11:26:03 +02:00
i915_gpu_error.c drm/i915: Implement inter-engine read-read optimisations 2015-05-21 15:11:42 +02:00
i915_ioc32.c
i915_irq.c drm/i915: reduce line width in {pch, i9xx}_get_hpd_pins() 2015-06-22 15:04:43 +02:00
i915_params.c drm/i915: Report an error when i915.reset prevents a reset 2015-06-23 14:01:38 +02:00
i915_reg.h drm/i915/gen8: Add WaFlushCoherentL3CacheLinesAtContextSwitch workaround 2015-06-23 14:01:41 +02:00
i915_suspend.c
i915_sysfs.c drm/i915/vlv: fix RC6 residency time calculation 2015-06-15 11:56:37 +02:00
i915_trace.h Merge tag 'drm-intel-next-2015-04-23-fixed' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-05-08 20:51:06 +10:00
i915_trace_points.c
i915_vgpu.c
i915_vgpu.h
intel_acpi.c
intel_atomic.c drm/i915: Make cdclk part of the atomic state. 2015-06-22 14:28:37 +02:00
intel_atomic_plane.c drm/i915: Remove transitional references from intel_plane_atomic_check. 2015-06-22 14:28:29 +02:00
intel_audio.c drm/i915/audio: do not mess with audio registers if port is invalid 2015-05-08 13:03:36 +02:00
intel_bios.c drm/i915/bios: be more explicit about discarding iomem address space 2015-05-20 11:26:01 +02:00
intel_bios.h drm/i915: Fix the VBT child device parsing for BSW 2015-04-10 08:56:14 +02:00
intel_crt.c drm/i915: Disable CRT port after pipe on PCH platforms 2015-05-21 23:23:16 +02:00
intel_csr.c Merge remote-tracking branch 'airlied/drm-next' into HEAD 2015-06-23 14:01:53 +02:00
intel_ddi.c drm/i915/bxt: fix DDI PHY vswing scale value setting 2015-06-12 13:14:38 +03:00
intel_display.c Merge remote-tracking branch 'airlied/drm-next' into HEAD 2015-06-23 14:01:53 +02:00
intel_dp.c drm/i915: Split skl_update_scaler, v4. 2015-06-22 14:19:50 +02:00
intel_dp_mst.c drm/i915: Use for_each_connector_in_state helper macro 2015-05-08 13:03:58 +02:00
intel_drv.h drm/i915: Remove unused ring argument from frontbuffer invalidate and busy functions. 2015-06-22 15:59:18 +02:00
intel_dsi.c drm/i915/dsi: remove non-op hot plug callback 2015-05-29 10:15:21 +02:00
intel_dsi.h
intel_dsi_panel_vbt.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_dsi_pll.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_dvo.c drm/i915: Silence compiler warning in dvo 2015-04-29 14:37:48 +03:00
intel_fbc.c drm/i915: don't set the FBC plane select bits on HSW+ 2015-06-15 18:36:42 +02:00
intel_fbdev.c drm/i915: Remove unused ring argument from frontbuffer invalidate and busy functions. 2015-06-22 15:59:18 +02:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: Remove unused ring argument from frontbuffer invalidate and busy functions. 2015-06-22 15:59:18 +02:00
intel_hdmi.c drm/i915: Double the port clock when using double clocked modes with 12bpc 2015-06-15 11:36:40 +02:00
intel_hotplug.c drm/i915: move generic hotplug code into new intel_hotplug.c file 2015-06-22 15:03:42 +02:00
intel_i2c.c drm/i915: don't register invalid gmbus pins for skl 2015-05-20 11:25:50 +02:00
intel_lrc.c drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
intel_lrc.h drm/i915: Move common request allocation code into a common function 2015-04-01 07:54:30 +02:00
intel_lvds.c drm/i915: Ignore LVDS presence in VBT flag if the LVDS is enabled by BIOS 2015-06-22 16:13:48 +02:00
intel_modes.c
intel_opregion.c
intel_overlay.c drm/i915: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
intel_panel.c drm/i915/bxt: BLC implementation 2015-05-08 13:03:38 +02:00
intel_pm.c drm/i915: Remove more ilk rc6 remnants 2015-06-15 23:25:25 +02:00
intel_psr.c drm/i915: PSR VLV: Add single frame update. 2015-04-14 19:15:23 +02: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: i915_add_request must not fail 2015-06-23 14:01:57 +02:00
intel_ringbuffer.h drm/i915: Reserve ring buffer space for i915_add_request() commands 2015-06-23 14:01:56 +02:00
intel_runtime_pm.c drm/i915: Throw out WIP CHV power well definitions 2015-05-28 11:13:50 +02:00
intel_sdvo.c drm/i915: Disable SDVO port after the pipe on PCH platforms 2015-05-21 23:22:01 +02:00
intel_sdvo_regs.h
intel_sideband.c drm/i915: s/dpio_lock/sb_lock/ 2015-05-28 11:13:51 +02:00
intel_sprite.c drm/i915: Make setting color key atomic. 2015-06-22 14:28:15 +02:00
intel_tv.c drm/i915: Allocate connector state together with the connectors 2015-04-13 15:21:21 +03:00
intel_uncore.c drm/i915: Report an error when i915.reset prevents a reset 2015-06-23 14:01:38 +02:00
Kconfig drm/i915: Remove KMS Kconfig option 2015-06-22 16:16:35 +02:00
Makefile drm/i915: move generic hotplug code into new intel_hotplug.c file 2015-06-22 15:03:42 +02:00