linux-hardened/drivers/gpu/drm/i915
Chris Wilson e8a9c58fcd drm/i915: Unify active context tracking between legacy/execlists/guc
The requests conversion introduced a nasty bug where we could generate a
new request in the middle of constructing a request if we needed to idle
the system in order to evict space for a context. The request to idle
would be executed (and waited upon) before the current one, creating a
minor havoc in the seqno accounting, as we will consider the current
request to already be completed (prior to deferred seqno assignment) but
ring->last_retired_head would have been updated and still could allow
us to overwrite the current request before execution.

We also employed two different mechanisms to track the active context
until it was switched out. The legacy method allowed for waiting upon an
active context (it could forcibly evict any vma, including context's),
but the execlists method took a step backwards by pinning the vma for
the entire active lifespan of the context (the only way to evict was to
idle the entire GPU, not individual contexts). However, to circumvent
the tricky issue of locking (i.e. we cannot take struct_mutex at the
time of i915_gem_request_submit(), where we would want to move the
previous context onto the active tracker and unpin it), we take the
execlists approach and keep the contexts pinned until retirement.
The benefit of the execlists approach, more important for execlists than
legacy, was the reduction in work in pinning the context for each
request - as the context was kept pinned until idle, it could short
circuit the pinning for all active contexts.

We introduce new engine vfuncs to pin and unpin the context
respectively. The context is pinned at the start of the request, and
only unpinned when the following request is retired (this ensures that
the context is idle and coherent in main memory before we unpin it). We
move the engine->last_context tracking into the retirement itself
(rather than during request submission) in order to allow the submission
to be reordered or unwound without undue difficultly.

And finally an ulterior motive for unifying context handling was to
prepare for mock requests.

v2: Rename to last_retired_context, split out legacy_context tracking
for MI_SET_CONTEXT.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161218153724.8439-3-chris@chris-wilson.co.uk
2016-12-18 16:18:50 +00:00
..
gvt drm/i915: Mark all non-vma being inserted into the address spaces 2016-12-05 20:49:17 +00:00
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c drm/i915: Use the precomputed value for whether to enable command parsing 2016-11-24 13:52:34 +00:00
i915_debugfs.c drm/i915: Move all the DP compliance data to a separate struct 2016-12-13 16:42:36 +02:00
i915_drv.c drm/i915: Use DRM_DEV_ERROR in i915_driver_load 2016-12-08 12:31:33 +00:00
i915_drv.h drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_gem.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_gem.h drm/i915: introduce GEM_WARN_ON 2016-12-16 21:16:36 +00:00
i915_gem_batch_pool.c drm/i915: Move GEM activity tracking into a common struct reservation_object 2016-10-28 20:53:50 +01:00
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_gem_dmabuf.c drm/i915: Make GEM object alloc/free and stolen created take dev_priv 2016-12-01 18:00:15 +00:00
i915_gem_evict.c drm/i915: Retire before attempting to evict from the active lists 2016-12-12 12:25:32 +00:00
i915_gem_execbuffer.c drm/i915: Add a reminder that i915_vma_move_to_active() requires struct_mutex 2016-12-18 16:18:48 +00:00
i915_gem_fence_reg.c drm/i915: simplify check for I915G/I945G in bit 6 swizzling detection 2016-12-14 15:18:52 +02:00
i915_gem_fence_reg.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_gtt.c drm/i915: move vma sanity checking into i915_vma_bind 2016-12-16 21:17:22 +00:00
i915_gem_gtt.h drm/i915: Convert vm->dev backpointer to vm->i915 2016-11-29 11:38:00 +00:00
i915_gem_internal.c drm/i915: rename BROADWATER and CRESTLINE to I965G and I965GM, respectively 2016-12-07 15:18:33 +02:00
i915_gem_object.h drm/i915: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
i915_gem_render_state.c drm/i915: Introduce HAS_64BIT_RELOC 2016-11-03 12:45:57 +02:00
i915_gem_render_state.h drm/i915: Reuse the active golden render state batch 2016-10-28 20:53:44 +01:00
i915_gem_request.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_gem_request.h drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_gem_shrinker.c drm/i915: Unify global_list into global_link 2016-11-02 15:17:13 +02:00
i915_gem_stolen.c drm/i915: distinguish G33 and Pineview from each other 2016-12-07 23:28:33 +02:00
i915_gem_tiling.c drm/i915: Convert vm->dev backpointer to vm->i915 2016-11-29 11:38:00 +00:00
i915_gem_timeline.c drm/i915: Create distinct lockclasses for execution vs user timelines 2016-11-14 21:00:21 +00:00
i915_gem_timeline.h drm/i915: Rename i915_gem_timeline.next_seqno to .seqno 2016-11-25 07:01:11 +00:00
i915_gem_userptr.c drm/i915: Make GEM object alloc/free and stolen created take dev_priv 2016-12-01 18:00:15 +00:00
i915_gpu_error.c drm/i915: replace platform flags with a platform enum 2016-12-07 11:58:26 +02:00
i915_guc_reg.h drm/i915/guc: Drop guc2host/host2guc from names 2016-11-25 21:28:57 +00:00
i915_guc_submission.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_ioc32.c
i915_irq.c drm/i915/glk: Reuse broxton code for geminilake 2016-12-02 16:38:56 +02:00
i915_memcpy.c
i915_mm.c
i915_oa_hsw.c drm/i915: Add more Haswell OA metric sets 2016-11-22 14:40:00 +01:00
i915_oa_hsw.h drm/i915: advertise available metrics via sysfs 2016-11-22 14:38:51 +01:00
i915_params.c drm/i915: Use the precomputed value for whether to enable command parsing 2016-11-24 13:52:34 +00:00
i915_params.h drm/i915: Use the precomputed value for whether to enable command parsing 2016-11-24 13:52:34 +00:00
i915_pci.c drm/i915: distinguish G33 and Pineview from each other 2016-12-07 23:28:33 +02:00
i915_perf.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
i915_pvinfo.h
i915_reg.h drm/i915/glk: Update Port PLL enable sequence for Geminilkae 2016-12-02 16:41:47 +02:00
i915_suspend.c drm/i915: Make i915_save/restore_state and intel_i2c_reset take dev_priv 2016-12-01 18:01:23 +00:00
i915_sw_fence.c drm/i915: Integrate i915_sw_fence with debugobjects 2016-11-25 13:49:26 +00:00
i915_sw_fence.h drm/i915: Integrate i915_sw_fence with debugobjects 2016-11-25 13:49:26 +00:00
i915_sysfs.c drm/i915: Fix setting of boost freq tunable 2016-12-14 15:48:28 +02:00
i915_trace.h drm/i915: Fix i915_gem_evict_for_vma (soft-pinning) 2016-12-05 20:49:17 +00:00
i915_trace_points.c
i915_vgpu.c Merge tag 'drm-intel-next-2016-09-19' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-09-20 06:23:22 +10:00
i915_vgpu.h
i915_vma.c drm/i915: convert to using range_overflows 2016-12-16 21:22:12 +00:00
i915_vma.h drm/i915: Optimise VMA lookup slightly 2016-12-15 13:31:26 +00:00
intel_acpi.c
intel_atomic.c
intel_atomic_plane.c Merge tag 'drm-misc-next-2016-11-29' of git://anongit.freedesktop.org/git/drm-misc into drm-next 2016-11-30 14:28:20 +10:00
intel_audio.c drm/i915/audio: extend audio sync rate support for DP MST 2016-12-02 16:20:48 +02:00
intel_bios.c drm/i915: Parse panel backlight controller from VBT 2016-12-12 17:22:08 +02:00
intel_bios.h drm/i915/dsi: Fix swapping of MIPI_SEQ_DEASSERT_RESET / MIPI_SEQ_ASSERT_RESET 2016-12-07 19:37:22 +02:00
intel_breadcrumbs.c drm/i915: Add a warning on shutdown if signal threads still active 2016-11-21 11:49:06 +00:00
intel_color.c drm/i915: Assorted INTEL_INFO(dev) cleanups 2016-11-17 13:56:35 +00:00
intel_crt.c drm/i915: Pass dev_priv to intel_setup_outputs() 2016-11-25 16:43:24 +02:00
intel_csr.c drm/i915: fix compilation warnings on maybe uninitialized pointers 2016-11-29 11:31:01 +01:00
intel_ddi.c drm/i915/glk: Reuse broxton code for geminilake 2016-12-02 16:38:56 +02:00
intel_device_info.c drm/i915: give G45 and GM45 their own platform enums 2016-12-07 15:19:51 +02:00
intel_display.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_dp.c drm/i915: tune down the fast link training vs boot fail 2016-12-13 23:36:29 +01:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915/skl: drop workarounds for A0 and B0 revisions 2016-09-26 12:08:22 +03:00
intel_dp_mst.c drm/i915: Validate mode against max. link data rate for DP MST 2016-12-05 16:23:18 +02:00
intel_dpio_phy.c drm/i915: Only poll DW3_A when init DDI PHY for ports B and C. 2016-12-02 12:16:25 -08:00
intel_dpll_mgr.c drm/i915/glk: Update Port PLL enable sequence for Geminilkae 2016-12-02 16:41:47 +02:00
intel_dpll_mgr.h drm/i915/dp: Add a standalone function to obtain shared dpll for HSW/BDW/SKL/BXT 2016-09-09 14:53:18 -07:00
intel_drv.h drm/i915: Intel panel downclock cleanup 2016-12-13 17:26:49 +02:00
intel_dsi.c drm/i915: relax uncritical udelay_range() settings 2016-12-16 11:21:30 +02:00
intel_dsi.h
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c drm/i915/bxt: add bxt dsi gpio element support 2016-12-13 14:49:15 +02:00
intel_dsi_pll.c drm/i915: relax uncritical udelay_range() 2016-12-16 11:22:01 +02:00
intel_dvo.c drm/i915: Pass dev_priv to intel_setup_outputs() 2016-11-25 16:43:24 +02:00
intel_engine_cs.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_fbc.c drm/i915/fbc: convert intel_fbc.c to use INTEL_GEN() 2016-11-14 14:00:29 -02:00
intel_fbdev.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-12-05 09:52:17 +01:00
intel_fifo_underrun.c drm/i915: Always use intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_frontbuffer.c
intel_frontbuffer.h drm/i915: Move frontbuffer CS write tracking from ggtt vma to object 2016-11-18 11:15:59 +00:00
intel_guc_fwif.h drm/i915/guc: Drop comment on fwif autogeneration 2016-12-07 07:10:21 +00:00
intel_guc_loader.c drm/i915: Fix kerneldoc for intel_guc_fini 2016-12-02 09:55:46 +00:00
intel_gvt.c Documentation/gpu: Add section for Intel GVT-g host support 2016-10-20 17:18:39 +08:00
intel_gvt.h drm/i915/gvt: clean up intel_gvt.h as interface for i915 core 2016-10-20 17:18:30 +08:00
intel_hangcheck.c drm/i915: Disable hangcheck when wedged 2016-11-22 17:42:17 +00:00
intel_hdmi.c drm/i915/glk: Reuse broxton code for geminilake 2016-12-02 16:38:56 +02:00
intel_hotplug.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_i2c.c drm/i915: add some more "i" in platform names for consistency 2016-12-07 15:19:31 +02:00
intel_lrc.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_lrc.h drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_lspcon.c drm/i915/lspcon: Remove unused force change mode parameter 2016-11-23 13:32:01 +02:00
intel_lvds.c drm/i915: Intel panel detection cleanup 2016-12-13 17:25:26 +02:00
intel_mocs.c drm/i915/glk: Reuse broxton code for geminilake 2016-12-02 16:38:56 +02:00
intel_mocs.h drm/i915: Make various init functions take dev_priv 2016-12-01 18:01:15 +00:00
intel_modes.c
intel_opregion.c drm/i915/opregion: fill in the CADL from connector list, not DIDL 2016-11-17 12:45:59 +02:00
intel_overlay.c drm/i915: add some more "i" in platform names for consistency 2016-12-07 15:19:31 +02:00
intel_panel.c drm/i915: clean up Hz to PWM for i965 2016-12-13 17:28:08 +02:00
intel_pipe_crc.c drm/i915/debugfs: Move out pipe CRC code 2016-12-13 09:41:24 +01:00
intel_pm.c drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_psr.c drm/i915: disable PSR by default on HSW/BDW 2016-12-14 18:15:24 -02: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: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_ringbuffer.h drm/i915: Unify active context tracking between legacy/execlists/guc 2016-12-18 16:18:50 +00:00
intel_runtime_pm.c drm/i915/dsi: Do not clear DPOUNIT_CLOCK_GATE_DISABLE from vlv_init_display_clock_gating 2016-12-05 20:45:58 +02:00
intel_sdvo.c drm/i915: distinguish G33 and Pineview from each other 2016-12-07 23:28:33 +02:00
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-12-05 09:52:17 +01:00
intel_tv.c drm/i915: Pass dev_priv to intel_setup_outputs() 2016-11-25 16:43:24 +02:00
intel_uc.c drm/i915/guc: Init send_mutex in intel_uc_init_early() 2016-11-25 21:42:36 +00:00
intel_uc.h drm/i915: Make various init functions take dev_priv 2016-12-01 18:01:15 +00:00
intel_uncore.c drm/i915: Catch non-existent registers in find_fw_domain 2016-12-08 09:37:23 +02:00
intel_vbt_defs.h drm/i915: Assume non-DP++ port if dvo_port is HDMI and there's no AUX ch specified in the VBT 2016-11-16 10:06:14 +02:00
Kconfig drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
Kconfig.debug drm/i915: Enable swfence debugobject support for i915.ko 2016-12-05 20:49:17 +00:00
Makefile drm/i915/debugfs: Move out pipe CRC code 2016-12-13 09:41:24 +01:00