linux/drivers/gpu/drm/i915
Dave Gordon 4f54741e07 drm/i915: Make ring freespace calculation more robust
The used space in a ring is given by the cyclic distance from the
consumer (HEAD) to the producer (TAIL), i.e. ((tail-head) MOD size);
conversely, the available space in a ring is the cyclic distance
from the producer to the consumer, MINUS the amount reserved for a
"gap" that is supposed to guarantee that the producer never catches
up with or overruns the consumer. Note that some GEN h/w requires
that TAIL never approach to within one cacheline of HEAD, so the gap
is usually set to twice the cacheline size to ensure this.

While the existing code gives the correct answer for correct inputs,
if the producer HAS overrun into the reserved space, the result can
be a value larger than the maximum valid value (size-reserved). We
can improve this by reorganising the calculation, so that in the
event of overrun the result will be negative rather than over-large.

This means that the commonly-used test (available >= required)
will then reject further writes into the ring after an overrun,
giving some chance that we can recover from or at least diagnose
the original problem; whereas allowing more writes would likely both
confuse the h/w and destroy the evidence of what went wrong.

Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2014-12-03 09:35:26 +01:00
..
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c drm/i915: Add the predicate source registers to the register whitelist 2014-11-14 10:29:24 +01:00
i915_debugfs.c drm/i915: Remove redundant flip_work->flip_queued_ring 2014-12-03 09:35:23 +01:00
i915_dma.c drm/i915: Remove user pinning code 2014-12-03 09:35:11 +01:00
i915_drv.c drm/i915: Deal with video overlay on GPU reset 2014-12-03 09:35:24 +01:00
i915_drv.h drm/i915: Convert 'trace_irq' to use requests rather than seqnos 2014-12-03 09:35:24 +01:00
i915_gem.c drm/i915: Convert 'trace_irq' to use requests rather than seqnos 2014-12-03 09:35:24 +01:00
i915_gem_context.c drm/i915: Remove the now redundant 'obj->ring' 2014-12-03 09:35:23 +01:00
i915_gem_debug.c
i915_gem_dmabuf.c
i915_gem_evict.c
i915_gem_execbuffer.c drm/i915: Convert trace functions from seqno to request 2014-12-03 09:35:21 +01:00
i915_gem_gtt.c Linux 3.18-rc7 2014-12-02 10:58:33 +10:00
i915_gem_gtt.h drm/i915: Replace last_[rwf]_seqno with last_[rwf]_req 2014-12-03 09:35:14 +01:00
i915_gem_render_state.c drm/i915: Remove obsolete seqno parameter from 'i915_add_request' 2014-12-03 09:35:19 +01:00
i915_gem_render_state.h
i915_gem_stolen.c
i915_gem_tiling.c drm/i915: Replace last_[rwf]_seqno with last_[rwf]_req 2014-12-03 09:35:14 +01:00
i915_gem_userptr.c
i915_gpu_error.c drm/i915: Remove the now redundant 'obj->ring' 2014-12-03 09:35:23 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Convert 'i915_seqno_passed' calls into 'i915_gem_request_completed' 2014-12-03 09:35:22 +01:00
i915_params.c
i915_reg.h drm/i915/dsi: clean up MIPI DSI pipe vs. port usage 2014-12-03 09:35:25 +01:00
i915_suspend.c drm/i915: unify remaining register save/restore code a bit 2014-11-14 10:29:28 +01:00
i915_sysfs.c
i915_trace.h drm/i915: Convert 'trace_irq' to use requests rather than seqnos 2014-12-03 09:35:24 +01:00
i915_trace_points.c
i915_ums.c drm/i915: don't save/restore backlight hist ctl registers 2014-11-14 10:29:28 +01:00
intel_acpi.c
intel_audio.c drm/i915/audio: fix monitor presence indication after disable 2014-11-18 11:17:37 +01:00
intel_bios.c drm/i915: Parse VBT PSR block. 2014-12-03 09:35:05 +01:00
intel_bios.h drm/i915: Parse VBT PSR block. 2014-12-03 09:35:05 +01:00
intel_crt.c
intel_ddi.c drm/i915: Don't rely upon encoder->type for infoframe hw state readout 2014-11-20 22:37:04 +01:00
intel_display.c drm/i915: Remove redundant flip_work->flip_queued_ring 2014-12-03 09:35:23 +01:00
intel_dp.c drm/i915: Enable PSR for Baytrail and Braswell. 2014-12-03 09:35:10 +01:00
intel_dp_mst.c drm: Miscellaneous fixes for v3.19-rc1 2014-11-15 09:37:20 +10:00
intel_drv.h drm/i915: Deal with video overlay on GPU reset 2014-12-03 09:35:24 +01:00
intel_dsi.c drm/i915/dsi: add ports to intel_dsi to describe the ports being driven 2014-12-03 09:35:25 +01:00
intel_dsi.h drm/i915/dsi: add ports to intel_dsi to describe the ports being driven 2014-12-03 09:35:25 +01:00
intel_dsi_cmd.c drm/i915/dsi: clean up MIPI DSI pipe vs. port usage 2014-12-03 09:35:25 +01:00
intel_dsi_cmd.h
intel_dsi_panel_vbt.c
intel_dsi_pll.c
intel_dvo.c
intel_fbdev.c
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: Introduce intel_psr.c 2014-11-17 19:12:28 +01:00
intel_hdmi.c drm/i915/chv: Enable AVI, SPD and HDMI infoframes for CHV. 2014-12-03 09:29:34 +01:00
intel_i2c.c
intel_lrc.c drm/i915: Connect requests to rings at creation not submission 2014-12-03 09:35:22 +01:00
intel_lrc.h drm/i915/bdw: Pin the context backing objects to GGTT on-demand 2014-11-19 19:32:58 +01:00
intel_lvds.c drm/i915: Pass the current pipe from eDP init to backlight setup 2014-11-14 10:29:20 +01:00
intel_modes.c
intel_opregion.c
intel_overlay.c drm/i915: Deal with video overlay on GPU reset 2014-12-03 09:35:24 +01:00
intel_panel.c Linux 3.18-rc7 2014-12-02 10:58:33 +10:00
intel_pm.c Linux 3.18-rc7 2014-12-02 10:58:33 +10:00
intel_psr.c drm/i915: VLV/CHV PSR Software timer mode 2014-12-03 09:35:08 +01: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: Make ring freespace calculation more robust 2014-12-03 09:35:26 +01:00
intel_ringbuffer.h drm/i915: Convert 'trace_irq' to use requests rather than seqnos 2014-12-03 09:35:24 +01:00
intel_runtime_pm.c drm/i915: Fix short description of intel_display_power_is_enabled() 2014-12-03 09:35:12 +01:00
intel_sdvo.c
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c drm/i915: use the correct obj when preparing the sprite plane 2014-11-14 10:29:13 +01:00
intel_tv.c
intel_uncore.c drm/i915/skl: Update in Gen9 multi-engine forcewake range 2014-12-03 09:29:41 +01:00
Kconfig
Makefile drm/i915: Introduce intel_psr.c 2014-11-17 19:12:28 +01:00