linux/drivers/gpu/drm/i915
Chris Wilson fbb30a5c46 drm/i915: Flush to GTT domain all GGTT bound objects after hibernation
Recently I have been applying an optimisation to avoid stalling and
clflushing GGTT objects based on their current binding. That is we only
set-to-gtt-domain upon first bind. However, on hibernation the objects
remain bound, but they are in the CPU domain. Currently (since commit
975f7ff42e ("drm/i915: Lazily migrate the objects after hibernation"))
we only flush scanout objects as all other objects are expected to be
flushed prior to use. That breaks down in the face of the runtime
optimisation above - and we need to flush all GGTT pinned objects
(essentially ringbuffers).

To reduce the burden of extra clflushes, we only flush those objects we
cannot discard from the GGTT. Everything pinned to the scanout, or
current contexts or ringbuffers will be flushed and rebound. Other
objects, such as inactive contexts, will be left unbound and in the CPU
domain until first use after resuming.

Fixes: 7abc98fadf ("drm/i915: Only change the context object's domain...")
Fixes: 57e8853181 ("drm/i915: Use VMA for ringbuffer tracking")
References: https://bugs.freedesktop.org/show_bug.cgi?id=94722
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: David Weinehall <david.weinehall@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160909201957.2499-1-chris@chris-wilson.co.uk
2016-09-09 21:31:43 +01:00
..
gvt
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915/cmdparser: Accelerate copies from WC memory 2016-08-18 22:37:01 +01:00
i915_debugfs.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_drv.c drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
i915_drv.h drm/i915: Prepare object synchronisation for asynchronicity 2016-09-09 14:23:06 +01:00
i915_gem_batch_pool.c drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_batch_pool.h drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_context.c drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
i915_gem_dmabuf.c drm/i915: Support for creating write combined type vmaps 2016-08-12 13:06:36 +01:00
i915_gem_dmabuf.h
i915_gem_evict.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_execbuffer.c drm/i915: Serialise execbuf operation after a dma-buf reservation object 2016-09-09 14:23:08 +01:00
i915_gem_fence.c drm/i915: Flush delayed fence releases after reset 2016-08-19 16:59:22 +01:00
i915_gem_gtt.c drm/i915: Flush to GTT domain all GGTT bound objects after hibernation 2016-09-09 21:31:43 +01:00
i915_gem_gtt.h drm/i915: Embed the scratch page struct into each VM 2016-08-22 12:19:52 +01:00
i915_gem_render_state.c drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_render_state.h drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_request.c drm/i915: Nonblocking request submission 2016-09-09 14:23:08 +01:00
i915_gem_request.h drm/i915: Nonblocking request submission 2016-09-09 14:23:08 +01:00
i915_gem_shrinker.c drm/i915: Mark up all locked waiters 2016-09-09 14:23:03 +01:00
i915_gem_stolen.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
i915_gem_tiling.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_gem_userptr.c drm/i915: Expand bool interruptible to pass flags to i915_wait_request() 2016-09-09 14:23:03 +01:00
i915_gem.c drm/i915: Shrink objects prior to hibernation 2016-09-09 20:07:46 +01:00
i915_gem.h
i915_gpu_error.c drm/i915: Make HWS_NEEDS_PHYSICAL the exception 2016-09-07 16:07:09 -07:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/guc: Prepare for nonblocking execbuf submission 2016-09-09 14:23:06 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Avoid incrementing hangcheck whilst waiting for external fence 2016-09-09 14:23:07 +01:00
i915_memcpy.c drm/i915: Mark the static key for movntqda as static 2016-08-17 12:36:07 +01:00
i915_mm.c drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass 2016-08-19 17:13:36 +01:00
i915_params.c drm/i915: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_params.h drm/i915: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_pci.c drm/i915: Move HAS_GUC definition to platform definition 2016-09-07 16:07:09 -07:00
i915_pvinfo.h
i915_reg.h drm/i915/skl: Add support for the SAGV, fix underrun hangs 2016-08-22 12:54:41 +02:00
i915_suspend.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
i915_sw_fence.c drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sw_fence.h drm/i915: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00
i915_sysfs.c drm/i915: Drop mutex around clearing error state 2016-09-02 08:32:55 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Remove surplus drm_device parameter to i915_gem_evict_something() 2016-08-04 20:19:50 +01:00
i915_vgpu.c drm/i915: enable vGPU detection for all 2016-09-06 16:39:36 +03:00
i915_vgpu.h
intel_acpi.c
intel_atomic_plane.c drm/i915: Use drm_plane_helper_check_state() 2016-08-08 14:19:56 -04:00
intel_atomic.c
intel_audio.c drm/i915: Eliminate redundant local variable definition 2016-08-24 08:49:49 -07:00
intel_bios.c
intel_bios.h
intel_breadcrumbs.c drm/i915: Drive request submission through fence callbacks 2016-09-09 14:23:05 +01:00
intel_color.c drm/i915: Use more atomic state in intel_color.c 2016-08-23 11:58:56 +02:00
intel_crt.c drm/i915: Cleanup crt disable sequence on hsw+ 2016-08-24 09:49:10 +02:00
intel_csr.c drm/i915: Fix botched merge that downgrades CSR versions. 2016-08-22 12:54:50 +02:00
intel_ddi.c drm/i915: Split intel_ddi_pre_enable() into DP and HDMI versions 2016-09-07 13:55:33 -07:00
intel_device_info.c drm/i915: sseu: Add debug printf for slice/subslice masks 2016-09-02 18:17:52 +03:00
intel_display.c drm/i915: Prepare object synchronisation for asynchronicity 2016-09-09 14:23:06 +01:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/dp: Dump DP link status when link training stages fail 2016-08-24 08:49:27 -07:00
intel_dp_mst.c drm/i915: Remove ddi_pll_sel from intel_crtc_state 2016-09-07 13:55:33 -07:00
intel_dp.c drm/i915: Don't pass crtc_state to intel_dp_set_link_params() 2016-09-07 13:55:33 -07:00
intel_dpio_phy.c
intel_dpll_mgr.c drm/i915: Split hsw_get_dpll() 2016-09-07 13:55:33 -07:00
intel_dpll_mgr.h drm/i915: Split hsw_get_dpll() 2016-09-07 13:55:33 -07:00
intel_drv.h drm/i915: Separate out reset flags from the reset counter 2016-09-09 14:23:02 +01:00
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c
intel_dsi_pll.c
intel_dsi.c drm/i915: Convert intel_dsi to use atomic state 2016-08-23 11:21:39 +02:00
intel_dsi.h
intel_dvo.c drm/i915/dvo: Remove dangling call to drm_encoder_cleanup() 2016-08-24 14:54:01 +03:00
intel_engine_cs.c drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
intel_fbc.c Revert "drm/i915/fbc: Allow on unfenced surfaces, for recent gen" 2016-08-24 19:32:35 +01:00
intel_fbdev.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_frontbuffer.h drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_guc_fwif.h
intel_guc_loader.c drm/i915/guc: revisit GuC loader message levels 2016-09-05 16:05:01 +01:00
intel_guc.h drm/i915/guc: Prepare for nonblocking execbuf submission 2016-09-09 14:23:06 +01:00
intel_gvt.c
intel_gvt.h
intel_hdmi.c Revert "drm/i915: Check live status before reading edid" 2016-09-07 14:53:31 +03:00
intel_hotplug.c drm/i915: Mark i915_hpd_poll_init_work as static 2016-08-17 12:36:15 +01:00
intel_i2c.c drm/i915: Take forcewake once for the entire GMBUS transaction 2016-08-22 18:42:44 +01:00
intel_lrc.c drm/i915: Drive request submission through fence callbacks 2016-09-09 14:23:05 +01:00
intel_lrc.h drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
intel_lvds.c drm/i915: Convert intel_lvds to use atomic state 2016-08-23 11:29:45 +02:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
intel_opregion.c Linux 4.7 2016-07-26 17:26:29 +10:00
intel_overlay.c drm/i915: Embed the io-mapping struct inside drm_i915_private 2016-08-19 17:13:35 +01:00
intel_panel.c drm/i915/backlight: handle enabled but zero duty cycle at module load 2016-08-29 13:59:05 +02:00
intel_pm.c drm/i915: Drop local struct_mutex around intel_init_emon[ilk] 2016-09-09 14:23:02 +01:00
intel_psr.c Merge tag 'drm-intel-next-2016-08-08' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:53:57 +10:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
intel_ringbuffer.c drm/i915: Update reset path to fix incomplete requests 2016-09-09 14:23:05 +01:00
intel_ringbuffer.h drm/i915: Drive request submission through fence callbacks 2016-09-09 14:23:05 +01:00
intel_runtime_pm.c drm/i915: pdev cleanup 2016-08-22 12:19:52 +01:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Convert intel_sdvo to use atomic state 2016-08-23 11:21:51 +02:00
intel_sideband.c
intel_sprite.c drm/i915/skl: Don't try to update plane watermarks if they haven't changed 2016-09-07 12:29:17 +02:00
intel_tv.c drm/i915: Make encoder->compute_config take the connector state 2016-08-23 11:07:23 +02:00
intel_uncore.c drm/i915: Remove 64b mmio write vfuncs 2016-09-06 17:51:01 +01: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: Add a sw fence for collecting up dma fences 2016-09-09 14:22:55 +01:00