linux/drivers/gpu/drm
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
..
amd Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
arc
arm drm: BIT(DRM_ROTATE_?) -> DRM_ROTATE_? 2016-08-08 14:17:56 -04:00
armada drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
ast drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
atmel-hlcdc drm: BIT(DRM_ROTATE_?) -> DRM_ROTATE_? 2016-08-08 14:17:56 -04:00
bochs drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
bridge drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
cirrus Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
etnaviv
exynos Merge tag 'drm-for-v4.8-zpos' of git://people.freedesktop.org/~airlied/linux 2016-08-07 16:35:08 -07:00
fsl-dcu
gma500 drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
hisilicon
i2c
i810 drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
i915 drm/i915: Flush to GTT domain all GGTT bound objects after hibernation 2016-09-09 21:31:43 +01:00
imx Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
mediatek Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
mga drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
mgag200 drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
msm drm: BIT(DRM_ROTATE_?) -> DRM_ROTATE_? 2016-08-08 14:17:56 -04:00
nouveau Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
omapdrm Revert "gpu: drm: omapdrm: dss-of: add missing of_node_put after calling of_parse_phandle" 2016-08-12 07:10:37 -04:00
panel
qxl drm: Protect fb_defio in drivers with CONFIG_KMS_FBDEV_EMULATION 2016-08-12 10:42:00 +02:00
r128 drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
radeon Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
rcar-du drm: rcar-du: Link HDMI encoder with bridge 2016-08-08 15:27:11 +10:00
rockchip drm/rockchip: Use drm_plane_helper_check_state() 2016-08-08 14:19:57 -04:00
savage drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
shmobile
sis drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
sti
sun4i drm/fb-helper: Add a dummy remove_conflicting_framebuffers 2016-08-12 10:41:18 +02:00
tdfx drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
tegra
tilcdc drm/tilcdc: Change tilcdc_crtc_page_flip() to tilcdc_crtc_update_fb() 2016-08-08 23:05:19 +03:00
ttm Merge branch 'drm-next-4.8' of git://people.freedesktop.org/~agd5f/linux into drm-next 2016-08-08 16:45:33 +10:00
udl drm: Protect fb_defio in drivers with CONFIG_KMS_FBDEV_EMULATION 2016-08-12 10:42:00 +02:00
vc4 drm/fb-helper: Add a dummy remove_conflicting_framebuffers 2016-08-12 10:41:18 +02:00
vgem
via drm: Mark up legacy/dri1 drivers with DRM_LEGACY 2016-08-08 10:05:22 +02:00
virtio drm/fb-helper: Add a dummy remove_conflicting_framebuffers 2016-08-12 10:41:18 +02:00
vmwgfx drm/vmwgfx: select CONFIG_FB 2016-08-12 10:41:46 +02:00
ati_pcigart.c
drm_agpsupport.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_atomic_helper.c Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
drm_atomic.c
drm_auth.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_blend.c
drm_bridge.c
drm_bufs.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_cache.c
drm_context.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_crtc_helper.c
drm_crtc_internal.h
drm_crtc.c Merge tag 'topic/drm-misc-2016-08-12' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:46:36 +10:00
drm_debugfs.c
drm_dma.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_dp_aux_dev.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm/dp_helper: Rate limit timeout errors from drm_dp_i2c_do_msg() 2016-08-09 18:23:44 +02:00
drm_dp_mst_topology.c
drm_drv.c drm: rename DRM_MINOR_LEGACY to DRM_MINOR_PRIMARY 2016-08-08 10:05:20 +02:00
drm_edid_load.c
drm_edid.c drm/edid: Set 8 bpc color depth for displays with "DFP 1.x compliant TMDS". 2016-08-09 08:56:04 +10:00
drm_encoder_slave.c
drm_fb_cma_helper.c
drm_fb_helper.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
drm_flip_work.c
drm_fops.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_fourcc.c
drm_gem_cma_helper.c
drm_gem.c
drm_global.c
drm_hashtab.c
drm_info.c
drm_internal.h
drm_ioc32.c
drm_ioctl.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_irq.c drm: Make sure drm_vblank_no_hw_counter isn't abused 2016-08-08 14:34:05 -04:00
drm_kms_helper_common.c
drm_legacy.h
drm_lock.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_memory.c
drm_mipi_dsi.c
drm_mm.c drm: Declare that create drm_mm nodes with size 0 is illegal 2016-08-08 10:05:21 +02:00
drm_modes.c drm/imx: convey the pixelclk-active and de-active flags from DT to the ipu-di driver 2016-08-08 11:44:20 +02:00
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_plane_helper.c drm/plane-helper: Add drm_plane_helper_check_state() 2016-08-08 14:19:45 -04:00
drm_platform.c
drm_prime.c
drm_probe_helper.c
drm_rect.c drm: Warn about negative sizes when calculating scale factor 2016-08-08 14:17:56 -04:00
drm_scatter.c drm: Used DRM_LEGACY for all legacy functions 2016-08-08 10:05:23 +02:00
drm_simple_kms_helper.c drm/simple_kms_helper: Use drm_plane_helper_check_state() 2016-08-08 14:19:58 -04:00
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vm.c
drm_vma_manager.c drm: Convert drm_vma_manager to embedded interval-tree in drm_mm 2016-08-08 10:05:17 +02:00
Kconfig drm/radeon|amgpu: Make fbdev emulation optional 2016-08-12 10:41:53 +02:00
Makefile drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass 2016-08-19 17:13:36 +01:00