linux/drivers/gpu/drm/i915
Chris Wilson 20311bd350 drm/i915/scheduler: Execute requests in order of priorities
Track the priority of each request and use it to determine the order in
which we submit requests to the hardware via execlists.

The priority of the request is determined by the user (eventually via
the context) but may be overridden at any time by the driver. When we set
the priority of the request, we bump the priority of all of its
dependencies to match - so that a high priority drawing operation is not
stuck behind a background task.

When the request is ready to execute (i.e. we have signaled the submit
fence following completion of all its dependencies, including third
party fences), we put the request into a priority sorted rbtree to be
submitted to the hardware. If the request is higher priority than all
pending requests, it will be submitted on the next context-switch
interrupt as soon as the hardware has completed the current request. We
do not currently preempt any current execution to immediately run a very
high priority request, at least not yet.

One more limitation, is that this is first implementation is for
execlists only so currently limited to gen8/gen9.

v2: Replace recursive priority inheritance bumping with an iterative
depth-first search list.
v3: list_next_entry() for walking lists
v4: Explain how the dfs solves the recursion problem with PI.

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/20161114204105.29171-8-chris@chris-wilson.co.uk
2016-11-14 21:01:21 +00:00
..
gvt drm/i915/gvt: add KVMGT support 2016-11-10 15:45:39 +08: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: Refactor object page API 2016-10-28 20:53:46 +01:00
i915_debugfs.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
i915_drv.c drm/i915/scheduler: Signal the arrival of a new request 2016-11-14 21:00:26 +00:00
i915_drv.h drm/i915/scheduler: Record all dependencies upon request construction 2016-11-14 21:00:28 +00:00
i915_gem.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
i915_gem.h drm/i915: avoid harmless empty-body warning 2016-11-08 17:33:47 +01: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: Export a function to flush the context upon pinning 2016-11-01 14:26:33 +00:00
i915_gem_dmabuf.c drm/i915: Move GEM activity tracking into a common struct reservation_object 2016-10-28 20:53:50 +01:00
i915_gem_evict.c drm/i915: Enable multiple timelines 2016-10-28 20:53:57 +01:00
i915_gem_execbuffer.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem_fence_reg.c drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +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: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
i915_gem_gtt.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_gem_internal.c drm/i915: Allow shrinking of userptr objects once again 2016-11-01 16:35:26 +00:00
i915_gem_object.h drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02: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/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
i915_gem_request.h drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +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: Assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gem_tiling.c drm/i915: Fix pages pin counting around swizzle quirk 2016-11-04 11:55:39 +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: Create distinct lockclasses for execution vs user timelines 2016-11-14 21:00:21 +00:00
i915_gem_userptr.c drm/i915: Assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_gpu_error.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_guc_reg.h
i915_guc_submission.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
i915_ioc32.c
i915_irq.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
i915_memcpy.c
i915_mm.c
i915_params.c drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
i915_params.h drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
i915_pci.c drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
i915_pvinfo.h
i915_reg.h drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
i915_suspend.c
i915_sw_fence.c drm/i915: Give each sw_fence its own lockclass 2016-11-14 21:00:20 +00:00
i915_sw_fence.h drm/i915: Give each sw_fence its own lockclass 2016-11-14 21:00:20 +00:00
i915_sysfs.c
i915_trace.h drm/i915: Introduce a global_seqno for each request 2016-10-28 20:53:53 +01:00
i915_trace_points.c
i915_vgpu.c
i915_vgpu.h
i915_vma.c drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00
i915_vma.h drm/i915: Fix test on inputs for vma_compare() 2016-11-14 15:59:21 +00:00
intel_acpi.c
intel_atomic.c
intel_atomic_plane.c drm/i915: Add horizontal mirroring support for CHV pipe B planes 2016-11-14 19:58:48 +02:00
intel_audio.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_bios.c drm/i915: Assume non-DP++ port if dvo_port is HDMI and there's no AUX ch specified in the VBT 2016-11-14 16:29:46 +02:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Spin until breadcrumb threads are complete 2016-11-09 15:01:52 +00:00
intel_color.c drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00:00
intel_crt.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_csr.c drm/i915/DMC/KBL: Load DMC on KBL using the no_stepping_info array 2016-10-26 14:20:53 -07:00
intel_ddi.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_device_info.c drm/i915: Don't try to initialize sprite planes on pre-ilk 2016-10-31 16:56:32 +02:00
intel_display.c drm/i915: Remove some duplicated plane swapping logic 2016-11-14 20:27:55 +02:00
intel_dp.c drm/i915: Simplify DP port limited color range bit platform checks 2016-11-14 20:27:54 +02:00
intel_dp_aux_backlight.c
intel_dp_link_training.c
intel_dp_mst.c drm/i915: Kill dp_encoder_is_mst 2016-11-14 20:27:54 +02:00
intel_dpio_phy.c drm/i915/bxt: Don't set OCL2_LDOFUSE_PWR_DIS bit in phy init sequence 2016-11-02 09:35:47 +02:00
intel_dpll_mgr.c drm/i915: Address broxton phy registers based on phy and channel number 2016-10-28 12:25:24 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Kill dp_encoder_is_mst 2016-11-14 20:27:54 +02:00
intel_dsi.c
intel_dsi.h
intel_dsi_dcs_backlight.c
intel_dsi_panel_vbt.c
intel_dsi_pll.c
intel_dvo.c drm/i915: Pass dev_priv to intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_engine_cs.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +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 drm/i915: Pass dev_priv to INTEL_INFO everywhere apart from the gen use 2016-11-11 14:58:26 +00: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
intel_guc.h drm/i915/guc: Cache the client mapping 2016-11-03 19:57:43 +00:00
intel_guc_fwif.h drm/i915: Increase GuC log buffer size to reduce flush interrupts 2016-10-25 09:34:23 +01:00
intel_guc_loader.c drm/i915: Further assorted dev_priv cleanups 2016-11-11 14:58:26 +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: Move hangcheck code out from i915_irq.c 2016-11-02 11:59:10 +02:00
intel_hdmi.c drm/i915: Pass atomic state to intel_audio_codec_enable, v2. 2016-11-09 13:55:05 +01:00
intel_hotplug.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00:00
intel_i2c.c
intel_lrc.c drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
intel_lrc.h drm/i915: Make sure engines are idle during GPU idling in LR mode 2016-11-07 14:48:05 +02:00
intel_lspcon.c drm/i915/lspcon: Add workaround for resuming in PCON mode 2016-10-26 12:41:01 +03:00
intel_lvds.c drm/i915: Pass dev_priv to intel_get_crtc_for_pipe() 2016-11-01 16:40:38 +02:00
intel_mocs.c
intel_mocs.h
intel_modes.c
intel_opregion.c
intel_overlay.c drm/i915: Use lockless object free 2016-10-28 20:53:50 +01:00
intel_panel.c
intel_pm.c drm/i915/gen9: fix the WM memory bandwidth WA for Y tiling cases 2016-11-14 13:20:22 -02:00
intel_psr.c drm/i915: More assorted dev_priv cleanups 2016-11-11 14:58:26 +00: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: Defer transfer onto execution timeline to actual hw submission 2016-11-14 21:00:23 +00:00
intel_ringbuffer.h drm/i915/scheduler: Execute requests in order of priorities 2016-11-14 21:01:21 +00:00
intel_runtime_pm.c drm/i915: Pass dev_priv to .get_display_clock_speed() 2016-11-01 16:40:38 +02:00
intel_sdvo.c drm/i915: Pass dev_priv to IS_MOBILE() 2016-11-01 16:40:38 +02:00
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c drm/i915: Add horizontal mirroring support for CHV pipe B planes 2016-11-14 19:58:48 +02:00
intel_tv.c drm/i915: Pass dev_priv to intel_wait_for_vblank() 2016-11-01 16:40:38 +02:00
intel_uncore.c
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-14 16:29:46 +02:00
Kconfig drm/i915: rename preliminary_hw_support to alpha_support 2016-11-14 15:33:27 +02:00
Kconfig.debug
Makefile drm/i915: Split out i915_vma.c 2016-11-11 14:34:54 +02:00