linux/drivers/gpu/drm/i915
Chris Wilson c13d87ea53 drm/i915: Wait on external rendering for GEM objects
When transitioning to the GTT or CPU domain we wait on all rendering
from i915 to complete (with the optimisation of allowing concurrent read
access by both the GPU and client). We don't yet ensure all rendering
from third parties (tracked by implicit fences on the dma-buf) is
complete. Since implicitly tracked rendering by third parties will
ignore our cache-domain tracking, we have to always wait upon rendering
from third-parties when transitioning to direct access to the backing
store. We still rely on clients notifying us of cache domain changes
(i.e. they need to move to the GTT read or write domain after doing a CPU
access before letting the third party render again).

v2:
This introduces a potential WARN_ON into i915_gem_object_free() as the
current i915_vma_unbind() calls i915_gem_object_wait_rendering(). To
hit this path we first need to render with the GPU, have a dma-buf
attached with an unsignaled fence and then interrupt the wait. It does
get fixed later in the series (when i915_vma_unbind() only waits on the
active VMA and not all, including third-party, rendering.

To offset that risk, use the __i915_vma_unbind_no_wait hack.

Testcase: igt/prime_vgem/basic-fence-read
Testcase: igt/prime_vgem/basic-fence-mmap
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1469002875-2335-8-git-send-email-chris@chris-wilson.co.uk
2016-07-20 09:29:53 +01:00
..
gvt
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c
i915_debugfs.c drm/i915: Disable waitboosting for mmioflips/semaphores 2016-07-20 09:29:53 +01:00
i915_drv.c drm/i915: Flush logical context image out to memory upon suspend 2016-07-15 20:41:05 +01:00
i915_drv.h drm/i915: Disable waitboosting for mmioflips/semaphores 2016-07-20 09:29:53 +01:00
i915_gem.c drm/i915: Wait on external rendering for GEM objects 2016-07-20 09:29:53 +01:00
i915_gem.h
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915/evict: Always switch away from the current context 2016-07-15 20:40:53 +01:00
i915_gem_debug.c
i915_gem_dmabuf.c drm/i915: Mark imported dma-buf objects as being coherent 2016-07-20 09:29:53 +01:00
i915_gem_dmabuf.h
i915_gem_evict.c drm/i915/evict: Always switch away from the current context 2016-07-15 20:40:53 +01:00
i915_gem_execbuffer.c drm/i915: refactor eb_get_batch() 2016-07-19 09:06:32 +02:00
i915_gem_fence.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_gem_gtt.c drm/i915: Fill unused GGTT with scratch pages for VT-d 2016-07-08 13:36:27 +01:00
i915_gem_gtt.h drm/i915: tweak gen6_for_{each_pde, all_pdes} macros 2016-06-27 13:13:53 +01:00
i915_gem_render_state.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Disable waitboosting for fence_wait() 2016-07-20 09:29:53 +01:00
i915_gem_request.h drm/i915: Disable waitboosting for fence_wait() 2016-07-20 09:29:53 +01:00
i915_gem_shrinker.c drm/i915: Update ifdeffery for mutex->owner 2016-07-12 11:54:27 +01:00
i915_gem_stolen.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_gem_tiling.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_gem_userptr.c
i915_gpu_error.c drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
i915_guc_reg.h
i915_guc_submission.c drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Define a separate variable and control for RPS waitboost frequency 2016-07-14 15:22:58 +01:00
i915_params.c drm/i915/guc: Revert "drm/i915/guc: enable GuC loading & submission by default" 2016-07-19 15:45:21 -07:00
i915_params.h
i915_pci.c drm/i915/bxt: Remove the preliminary_hw_support flag 2016-07-01 21:25:54 +03:00
i915_pvinfo.h
i915_reg.h drm/i915/bxt: Fix sanity check for BIOS RC6 setup 2016-07-01 14:57:20 +03:00
i915_suspend.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
i915_sysfs.c drm/i915: Remove superfluous powersave work flushing 2016-07-14 15:23:16 +01:00
i915_trace.h drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
i915_trace_points.c
i915_vgpu.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
i915_vgpu.h
intel_acpi.c
intel_atomic.c
intel_atomic_plane.c
intel_audio.c drm/i915: Replace some open coded intel_crtc_has_dp_encoder()s 2016-07-07 13:10:12 +03: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: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
intel_color.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_crt.c drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() 2016-07-14 22:06:11 +02:00
intel_csr.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_ddi.c drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/ 2016-07-07 13:10:16 +03:00
intel_device_info.c drm/i915: Split out runtime configuration of device info to its own file 2016-07-05 11:53:27 +01:00
intel_display.c drm/i915: Disable waitboosting for mmioflips/semaphores 2016-07-20 09:29:53 +01:00
intel_dp.c drm/i915: Treat eDP as always connected, again 2016-07-18 14:31:34 +02:00
intel_dp_aux_backlight.c
intel_dp_link_training.c
intel_dp_mst.c drm/i915: Kill has_dp_encoder from pipe_config 2016-07-07 13:10:07 +03: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: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/ 2016-07-07 13:10:16 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Enable polling when we don't have hpd 2016-07-14 22:06:11 +02:00
intel_dsi.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_dsi.h
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_dvo.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_engine_cs.c drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
intel_fbc.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
intel_fbdev.c drm/i915/fbdev: Check for the framebuffer before use 2016-07-14 21:32:27 +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
intel_guc.h
intel_guc_fwif.h
intel_guc_loader.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_gvt.c
intel_gvt.h
intel_hdmi.c drm/i915: Simplify hdmi_12bpc_possible() 2016-07-07 13:10:24 +03:00
intel_hotplug.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
intel_i2c.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_lrc.c drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
intel_lrc.h drm/i915: Move common engine setup into intel_engine_cs.c 2016-07-14 11:17:20 +01:00
intel_lvds.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_mocs.c drm/i915: Give proper names to MOCS entries 2016-07-19 20:35:37 +03:00
intel_mocs.h
intel_modes.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_opregion.c drm/i915: Ignore panel type from OpRegion on SKL 2016-07-14 16:05:40 +03:00
intel_overlay.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_panel.c drm/i915: Introduce Kabypoint PCH for Kabylake H/DT. 2016-07-07 10:01:37 -07:00
intel_pm.c drm/i915: Disable waitboosting for mmioflips/semaphores 2016-07-20 09:29:53 +01:00
intel_psr.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +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: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
intel_ringbuffer.h drm/i915: Derive GEM requests from dma-fence 2016-07-20 09:29:53 +01:00
intel_runtime_pm.c drm/i915: Enable polling when we don't have hpd 2016-07-14 22:06:11 +02:00
intel_sdvo.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_sdvo_regs.h
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: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_tv.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_uncore.c drm/i915: Fixup kerneldoc code snippets in intel_uncore.c 2016-07-19 10:34:24 +02:00
intel_vbt_defs.h
Kconfig
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Move GEM request routines to i915_gem_request.c 2016-07-20 09:29:53 +01:00