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
..
Kconfig drm/i915: Ditch UMS config option 2014-07-24 10:59:53 +02:00
Makefile drm/i915: Introduce intel_psr.c 2014-11-17 19:12:28 +01:00
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c drm/i915: Check pixel clock in ns2501 mode_valid hook 2014-09-03 11:05:21 +02:00
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 dma-buf: use reservation objects 2014-07-08 13:03:20 -07:00
i915_gem_evict.c drm/i915: fix another use-after-free in i915_gem_evict_everything 2014-09-19 14:41:16 +02:00
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 drm/i915/bdw: Render state init for Execlists 2014-09-03 11:04:52 +02:00
i915_gem_stolen.c drm/i915: Move flags describing VMA mappings into the VMA 2014-11-04 14:04:51 +01:00
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 drm/i915: Do not leak pages when freeing userptr objects 2014-09-29 15:31:01 +02:00
i915_gpu_error.c drm/i915: Remove the now redundant 'obj->ring' 2014-12-03 09:35:23 +01:00
i915_ioc32.c drm/i915: remove redundant #ifdef CONFIG_COMPAT 2014-10-24 16:34:07 +02:00
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 Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2014-10-14 09:39:08 +02:00
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 drm/i915: Do not export RC6p and RC6pp if they don't exist 2014-10-24 16:34:00 +02:00
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 drm/i915: Don't claim that we're resetting PCH ADPA register 2014-10-24 16:34:10 +02:00
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 drm/i915: wait for all DSI FIFOs to be empty 2014-08-07 11:07:15 +02:00
intel_dsi_panel_vbt.c drm/i915: Add support for Video Burst Mode for MIPI DSI 2014-08-08 17:43:45 +02:00
intel_dsi_pll.c drm/i915: Align intel_dsi*.c files a bit 2014-08-08 17:43:45 +02:00
intel_dvo.c drm/i915: Don't call DVO mode_set hook on DPMS changes 2014-09-03 11:05:14 +02:00
intel_fbdev.c drm/i915: Make intel_pin_and_fence_fb_obj take plane and framebuffer 2014-11-07 18:41:51 +01:00
intel_fifo_underrun.c drm/i915: kerneldoc for intel_fifo_underrun.c 2014-10-24 16:33:55 +02:00
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 drm/i915: Kill duplicated cdclk readout code from i2c 2014-07-07 11:27:52 +02:00
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 ACPI / i915: Update the condition to ignore firmware backlight change request 2014-09-30 01:11:18 +02:00
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 drm/i915 Add golden context support for Gen9 2014-11-04 14:04:55 +01:00
intel_renderstate_gen6.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen7.c drm/i915: Simplify processing of the golden render context state 2014-06-16 19:53:09 +02:00
intel_renderstate_gen8.c drm/i915 Update Gen8 golden context batch buffer 2014-11-04 14:04:54 +01:00
intel_renderstate_gen9.c drm/i915 Add golden context support for Gen9 2014-11-04 14:04:55 +01:00
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 drm/i915: Don't destroy DRM properties in the driver 2014-10-31 18:38:17 +01:00
intel_sdvo_regs.h
intel_sideband.c drm/i915: vlv/chv: fix DSI sideband register accessing 2014-05-19 17:50:14 +02:00
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 drm/i915: Clarify irq_lock locking, intel_tv_detect 2014-09-19 14:43:19 +02:00
intel_uncore.c drm/i915/skl: Update in Gen9 multi-engine forcewake range 2014-12-03 09:29:41 +01:00