linux/drivers/gpu/drm/i915
Chris Wilson 1ab22356b3 drm/i915: Prune the reservation shared fence array
The shared fence array is not autopruning and may continue to grow as an
object is shared between new timelines. Take the opportunity when we
think the object is idle (we have to confirm that any external fence is
also signaled) to decouple all the fences.

We apply a similar trick after waiting on an object, see commit
e54ca97747 ("drm/i915: Remove completed fences after a wait")

v2: No longer need to handle the batch pool as a special case.
v3: Need to trylock from within i915_vma_retire as this may be called
form the shrinker - and we may later try to allocate underneath the
reservation lock, so a deadlock is possible.

References: https://bugs.freedesktop.org/show_bug.cgi?id=102936
Fixes: d07f0e59b2 ("drm/i915: Move GEM activity tracking into a common struct reservation_object")
Fixes: 80b204bce8 ("drm/i915: Enable multiple timelines")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171107220656.5020-1-chris@chris-wilson.co.uk
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
2017-11-08 15:40:31 +00:00
..
gvt drm/i915/execlists: Distinguish the incomplete context notifies 2017-10-04 17:52:45 +01:00
selftests drm/i915/selftests: Take rpm wakeref around partial tiling tests 2017-11-07 17:50:34 +00:00
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: Silence smatch for cmdparser 2017-11-07 16:52:24 +00:00
i915_debugfs.c drm/i915: Stop frobbing with DDI encoder->type 2017-10-30 19:54:28 +02:00
i915_drv.c drm/i915/guc: Add support for reset engine using GuC commands 2017-11-02 08:42:11 +00:00
i915_drv.h drm/i915: Read ilk FDI PLL frequency once during initialisation 2017-11-08 15:40:09 +00:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_clflush.c drm/i915: Refactor testing obj->mm.pages 2017-10-16 20:44:19 +01:00
i915_gem_clflush.h drm/i915: Force CPU synchronisation even if userspace requests ASYNC 2017-07-27 22:07:24 +02:00
i915_gem_context.c drm/i915: Hold rcu_read_lock when iterating over the radixtree (vma idr) 2017-10-27 12:39:10 +01:00
i915_gem_context.h drm/i915: Replace execbuf vma ht with an idr 2017-08-18 11:59:02 +01:00
i915_gem_dmabuf.c drm/i915: s/sg_mask/sg_page_sizes/ 2017-10-09 17:07:29 +01:00
i915_gem_evict.c drm/i915: Use same test for eviction and submitting kernel context 2017-10-25 12:13:03 +01:00
i915_gem_execbuffer.c drm/i915: Reject unknown syncobj flags 2017-11-03 09:28:05 +00:00
i915_gem_fence_reg.c drm/i915: Track user GTT faulting per-vma 2017-10-09 17:07:29 +01:00
i915_gem_fence_reg.h
i915_gem_gtt.c drm/i915: Deconstruct struct sgt_dma initialiser 2017-11-07 11:09:35 +00:00
i915_gem_gtt.h drm/i915: support 64K pages for the 48b PPGTT 2017-10-07 10:11:57 +01:00
i915_gem_internal.c drm/i915: s/sg_mask/sg_page_sizes/ 2017-10-09 17:07:29 +01:00
i915_gem_object.c drm/i915: Split obj->cache_coherent to track r/w 2017-08-15 15:46:57 +01:00
i915_gem_object.h drm/i915: Move dev_priv->mm.[un]bound_list to its own lock 2017-10-16 20:44:19 +01:00
i915_gem_render_state.c drm/i915: Refactor testing obj->mm.pages 2017-10-16 20:44:19 +01:00
i915_gem_render_state.h
i915_gem_request.c drm/i915: Add a hook for making the engines idle (parking) and unparking 2017-10-25 18:47:30 +01:00
i915_gem_request.h drm/i915/scheduler: Support user-defined priorities 2017-10-04 17:52:46 +01:00
i915_gem_shrinker.c drm/i915: Idle the GPU before shinking everything 2017-11-08 15:40:31 +00:00
i915_gem_stolen.c drm/i915: Move dev_priv->mm.[un]bound_list to its own lock 2017-10-16 20:44:19 +01:00
i915_gem_tiling.c drm/i915: Refactor testing obj->mm.pages 2017-10-16 20:44:19 +01:00
i915_gem_timeline.c
i915_gem_timeline.h
i915_gem_userptr.c drm/i915: Fixup userptr mmu notifier registration error handling 2017-10-18 09:25:39 +01:00
i915_gem.c drm/i915: Lock llist_del_first() vs llist_del_all() 2017-11-06 12:05:02 +00:00
i915_gem.h
i915_gemfs.c drm/i915/gemfs: enable THP 2017-10-07 10:11:43 +01:00
i915_gemfs.h drm/i915: introduce simple gemfs 2017-10-07 10:11:41 +01:00
i915_gpu_error.c drm/i915: Handle error-state modparams in dedicated functions 2017-11-06 14:22:10 +00:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/guc: Assert guc->stage_desc_pool is allocated 2017-11-06 13:57:21 +00:00
i915_guc_submission.h drm/i915: Unify uC variable types to avoid flooding checkpatch.pl 2017-10-06 14:09:40 +03:00
i915_ioc32.c
i915_irq.c drm/i915/guc: Always enable the breadcrumbs irq 2017-10-25 18:47:30 +01:00
i915_memcpy.c
i915_mm.c
i915_oa_bdw.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_bdw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_bxt.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_bxt.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_cflgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_cflgt2.h drm/i915/perf: add support for Coffeelake GT2 2017-09-18 19:46:36 +01:00
i915_oa_chv.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_chv.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_glk.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_glk.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_hsw.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_hsw.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_kblgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_kblgt3.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_kblgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt2.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt2.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt3.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt3.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_oa_sklgt4.c drm/i915: ensure oa config uuid is null terminated 2017-11-02 14:52:58 +00:00
i915_oa_sklgt4.h drm/i915/perf: prune OA configs 2017-08-03 18:18:05 +01:00
i915_params.c drm/i915: Remove use_mmio_flip modparm, v2. 2017-10-04 15:51:09 +02:00
i915_params.h drm/i915: Remove use_mmio_flip modparm, v2. 2017-10-04 15:51:09 +02:00
i915_pci.c drm/i915: remove g4x lowfreq_avail and has_pipe_cxsr 2017-10-19 15:52:52 +03:00
i915_perf.c drm/i915/perf: fix perf enable/disable ioctls with 32bits userspace 2017-10-24 16:49:58 +01:00
i915_pvinfo.h drm/i915: enable to read CSB and CSB write pointer from HWSP in GVT-g VM 2017-10-16 13:56:29 +03:00
i915_reg.h drm/i915: Use fallback forcewake if primary ack missing 2017-11-02 12:40:21 +02:00
i915_selftest.h drm/i915: Don't use MI_STORE_DWORD_IMM on Sandybridge/vcs 2017-08-18 11:55:02 +01:00
i915_suspend.c drm/i915: Move i915_gem_restore_fences to i915_gem_resume 2017-09-29 12:30:17 +01:00
i915_sw_fence.c drm/i915: Convert timers to use timer_setup() 2017-10-18 14:56:10 +03:00
i915_sw_fence.h main drm pull for v4.13 2017-07-09 18:48:37 -07:00
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915: Rename intel_enable_rc6 to intel_rc6_enabled 2017-10-11 08:57:02 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Remove defunct trace points 2017-10-04 15:19:20 +01:00
i915_utils.h drm/i915: Warn in debug builds of incorrect usages of ptr_pack_bits 2017-11-03 09:28:06 +00:00
i915_vgpu.c drm/i915: Enable guest i915 full ppgtt functionality 2017-08-15 10:12:48 +08:00
i915_vgpu.h drm/i915: enable to read CSB and CSB write pointer from HWSP in GVT-g VM 2017-10-16 13:56:29 +03:00
i915_vma.c drm/i915: Prune the reservation shared fence array 2017-11-08 15:40:31 +00:00
i915_vma.h drm/i915: Track user GTT faulting per-vma 2017-10-09 17:07:29 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Pass proper old/new states to intel_plane_atomic_check_with_state() 2017-09-01 16:48:24 +03:00
intel_atomic.c
intel_audio.c drm/i915: Remove most encoder->type uses from the audio code 2017-10-31 21:51:50 +02:00
intel_bios.c drm/i915: Parse max HDMI TMDS clock from VBT 2017-10-30 19:48:11 +02:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Check that the breadcrumb wasn't disarmed automatically before parking 2017-11-01 13:43:14 +00:00
intel_cdclk.c drm/i915/cnl: Allow 2 pixel per clock on Cannonlake. 2017-10-25 10:36:01 -07:00
intel_color.c drm/i915: Use crtc_state_is_legacy_gamma in intel_color_check 2017-10-06 10:42:59 +02:00
intel_crt.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_csr.c drm/i915: Silence compiler for csr_load_work_fn() 2017-11-07 17:50:10 +00:00
intel_ddi.c drm/i915: Pass around crtc and connector states for audio 2017-10-31 21:50:43 +02:00
intel_device_info.c drm/i915/cnl: Symmetric scalers for each pipe 2017-11-01 14:18:22 -07:00
intel_display.c drm/i915: Read ilk FDI PLL frequency once during initialisation 2017-11-08 15:40:09 +00:00
intel_dp_aux_backlight.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
intel_dp_link_training.c drm/i915: Explicit the connector name for DP link training result 2017-07-19 08:32:42 +02:00
intel_dp_mst.c drm/i915: Pass around crtc and connector states for audio 2017-10-31 21:50:43 +02:00
intel_dp.c drm/i915: Pass around crtc and connector states for audio 2017-10-31 21:50:43 +02:00
intel_dpio_phy.c drm/i915: Simplify onion for bxt_ddi_phy_init() 2017-11-07 17:50:32 +00:00
intel_dpll_mgr.c drm/i915: Start using output_types for DPLL selection 2017-10-27 18:45:36 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Pass around crtc and connector states for audio 2017-10-31 21:50:43 +02:00
intel_dsi_dcs_backlight.c drm/i915: Initialize 'data' in intel_dsi_dcs_backlight.c 2017-08-16 18:02:00 +03:00
intel_dsi_pll.c
intel_dsi_vbt.c drm/i915/bxt: use NULL for GPIO connection ID 2017-08-21 11:52:29 +03:00
intel_dsi.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_dsi.h
intel_dvo.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_engine_cs.c drm/i915: Include intel_engine_is_idle() status in engine pretty-printer 2017-11-08 15:40:30 +00:00
intel_fbc.c drm/i915: adjust get_crtc_fence_y_offset() to use base.y instead of crtc.y 2017-10-18 17:02:45 +03:00
intel_fbdev.c drm/i915: Replace *_reference/unreference() or *_ref/unref with _get/put() 2017-10-13 16:53:59 +02:00
intel_fifo_underrun.c drm/i915: Don't rmw PIPESTAT enable bits 2017-09-25 16:54:09 +03:00
intel_frontbuffer.c
intel_frontbuffer.h
intel_guc_ct.c drm/i915/guc: Assert ctch->vma is allocated 2017-11-06 13:57:37 +00:00
intel_guc_ct.h
intel_guc_fw.c drm/i915/uc: Unify firmware loading 2017-10-16 18:53:29 +03:00
intel_guc_fw.h drm/i915/guc: Rename intel_guc_loader.c to intel_guc_fw.c 2017-10-16 18:53:25 +03:00
intel_guc_fwif.h drm/i915/guc: Add support for reset engine using GuC commands 2017-11-02 08:42:11 +00:00
intel_guc_log.c drm/i915: Unify uC variable types to avoid flooding checkpatch.pl 2017-10-06 14:09:40 +03:00
intel_guc_log.h drm/i915: Unify uC variable types to avoid flooding checkpatch.pl 2017-10-06 14:09:40 +03:00
intel_guc.c drm/i915/guc: Add support for reset engine using GuC commands 2017-11-02 08:42:11 +00:00
intel_guc.h drm/i915/guc: Preemption! With GuC 2017-10-26 21:35:21 +01:00
intel_gvt.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
intel_gvt.h
intel_hangcheck.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
intel_hdmi.c drm/i915: Pass around crtc and connector states for audio 2017-10-31 21:50:43 +02:00
intel_hotplug.c drm/i915: Introduce intel_hpd_pin function. 2017-08-11 11:53:47 -07:00
intel_huc.c drm/i915/huc: Use helper function while waiting for DMA completion 2017-10-26 21:35:21 +01:00
intel_huc.h drm/i915/huc: Fix includes in intel_huc.c 2017-10-06 16:01:15 +01:00
intel_i2c.c drm/i915: Make i2c lock ops static 2017-09-01 10:30:40 -07:00
intel_lpe_audio.c
intel_lrc.c drm/i915/guc: Preemption! With GuC 2017-10-26 21:35:21 +01:00
intel_lrc.h drm/i915/guc: Preemption! With GuC 2017-10-26 21:35:21 +01:00
intel_lspcon.c drm/i915: Add retries for LSPCON detection 2017-10-13 12:15:10 +03:00
intel_lvds.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_mocs.c
intel_mocs.h
intel_modes.c drm/i915: always update ELD connector type after get modes 2017-09-20 10:36:34 +03:00
intel_opregion.c drm/i915: Nuke intel_ddi_get_encoder_port() 2017-10-30 19:55:18 +02:00
intel_overlay.c drm: Pass struct drm_file * to __drm_mode_object_find [v2] 2017-10-12 10:03:04 +10:00
intel_panel.c drm/i915: Rename global i915 to i915_modparams 2017-09-22 14:50:36 +03:00
intel_pipe_crc.c drm/i915: Favor for_each_pipe() macro 2017-10-10 18:29:52 +03:00
intel_pm.c drm/i915: Prevent unbounded wm results in g4x_compute_wm() 2017-11-07 17:50:32 +00:00
intel_psr.c drm/i915: Remove mostly duplicated video DIP handling from PSR code 2017-10-17 12:38:58 +03:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c drm/i915/gen9: Send all components in VF state 2017-08-14 12:15:49 +03:00
intel_renderstate.h
intel_ringbuffer.c drm/i915: Empty the ring before disabling 2017-10-27 12:09:29 +01:00
intel_ringbuffer.h drm/i915/guc: Preemption! With GuC 2017-10-26 21:35:21 +01:00
intel_runtime_pm.c drm/i915: Start tracking voltage level in the cdclk state 2017-10-25 13:40:00 +03:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_sideband.c drm/i915: Move rps.hw_lock to dev_priv and s/hw_lock/pcu_lock 2017-10-11 08:56:56 +01:00
intel_sprite.c drm/i915: Unify skylake plane disable 2017-10-18 17:02:38 +03:00
intel_tv.c drm/i915: Populate output_types from .get_config() 2017-10-30 19:53:22 +02:00
intel_uc_fw.c drm/i915: Add Guc/HuC firmware details to error state 2017-11-06 14:22:06 +00:00
intel_uc_fw.h drm/i915: Add Guc/HuC firmware details to error state 2017-11-06 14:22:06 +00:00
intel_uc.c drm/i915/guc: Rename the function that resets the GuC 2017-11-02 08:08:05 +00:00
intel_uc.h drm/i915/guc: Move GuC core definitions into dedicated files 2017-10-06 09:37:20 +03:00
intel_uncore.c drm/i915: Use fallback forcewake if primary ack missing 2017-11-02 12:40:21 +02:00
intel_uncore.h drm/i915: Provide an assert for when we expect forcewake to be held 2017-10-09 17:07:29 +01:00
intel_vbt_defs.h drm/i915: Parse max HDMI TMDS clock from VBT 2017-10-30 19:48:11 +02:00
Kconfig drm/i915/fence: Avoid del_timer_sync() from inside a timer 2017-09-19 13:06:21 +01:00
Kconfig.debug drm/i915/selftests: Hide dangerous tests 2017-11-06 11:17:03 +00:00
Makefile drm/i915: Replace "cc-option -Wno-foo" with "cc-disable-warning foo" 2017-10-30 21:17:12 +00:00