linux_dsm_epyc7002/drivers/gpu/drm
Chris Wilson c9a6462288 drm/i915/execlists: Suppress preempting self
In order to avoid preempting ourselves, we currently refuse to schedule
the tasklet if we reschedule an inflight context. However, this glosses
over a few issues such as what happens after a CS completion event and
we then preempt the newly executing context with itself, or if something
else causes a tasklet_schedule triggering the same evaluation to
preempt the active context with itself.

However, when we avoid preempting ELSP[0], we still retain the preemption
value as it may match a second preemption request within the same time period
that we need to resolve after the next CS event. However, since we only
store the maximum preemption priority seen, it may not match the
subsequent event and so we should double check whether or not we
actually do need to trigger a preempt-to-idle by comparing the top
priorities from each queue. Later, this gives us a hook for finer
control over deciding whether the preempt-to-idle is justified.

The sequence of events where we end up preempting for no avail is:

1. Queue requests/contexts A, B
2. Priority boost A; no preemption as it is executing, but keep hint
3. After CS switch, B is less than hint, force preempt-to-idle
4. Resubmit B after idling

v2: We can simplify a bunch of tests based on the knowledge that PI will
ensure that earlier requests along the same context will have the highest
priority.
v3: Demonstrate the stale preemption hint with a selftest

References: a2bf92e8cc ("drm/i915/execlists: Avoid kicking priority on the current context")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190129185452.20989-4-chris@chris-wilson.co.uk
2019-01-29 20:00:05 +00:00
..
amd drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
arc drm/arc: Don't set the dpms hook 2019-01-11 22:54:37 +01:00
arm
armada drm: armada: Cleanup drm_display_mode print str 2019-01-15 13:20:48 +01:00
ast drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
atmel-hlcdc
bochs drm/bochs: move remaining fb bits to kms 2019-01-14 08:39:17 +01:00
bridge drm-misc-next for 5.1: 2019-01-24 20:02:12 +10:00
cirrus drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
etnaviv drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
exynos drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
fsl-dcu
gma500
hisilicon drm/hisilicon/kirin: Use drm_fbdev_generic_setup() 2019-01-14 12:33:36 +01:00
i2c drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
i810
i915 drm/i915/execlists: Suppress preempting self 2019-01-29 20:00:05 +00:00
imx
lib
mediatek drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
meson drm/meson: remove firmware framebuffers 2019-01-14 16:56:11 +01:00
mga
mgag200 drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
msm drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
mxsfb drm/mxsfb: Use drm_fbdev_generic_setup() 2019-01-14 12:35:05 +01:00
nouveau drm: Move the legacy kms disable_all helper to crtc helpers 2019-01-11 22:54:29 +01:00
omapdrm drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
panel drm/panel: panel-innolux: set display off in innolux_panel_unprepare 2019-01-22 16:49:15 -05:00
pl111
qxl drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
r128 drm/ati_pcigart: Fix error code in drm_ati_pcigart_init() 2018-12-17 10:47:17 +01:00
radeon drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
rcar-du drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
rockchip drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
savage
scheduler
selftests drm/selftest: fix spelling mistake "dimention" -> "dimension" 2018-12-11 15:19:42 +01:00
shmobile drm/shmob: Fix return value check in shmob_drm_probe 2019-01-14 03:51:16 +02:00
sis
sti drm-misc-next for 5.1: 2019-01-18 09:31:28 +10:00
stm drm-misc-next for 5.1: 2019-01-24 20:02:12 +10:00
sun4i drm/sun4i: frontend: Hook-in support for the A20 2019-01-18 21:12:34 +01:00
tdfx
tegra Merge drm/drm-next into drm-misc-next 2019-01-11 16:32:10 +01:00
tilcdc tilcdc pull request for Linux v4.22 2019-01-11 06:29:31 +10:00
tinydrm drm/tinydrm: Use damage helper for dirtyfb 2019-01-17 10:57:15 +01:00
ttm drm/ttm: Use drm_debug_printer for all ttm_bo_mem_space_debug output 2018-12-21 15:27:58 -05:00
tve200
udl
v3d drm/v3d: Invalidate the caches from the outside in. 2018-12-07 10:56:51 -08:00
vc4 drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
vgem dma-buf: make fence sequence numbers 64 bit v2 2018-12-07 12:44:16 +01:00
via
virtio drm/virtio: Drop deprecated load/unload initialization 2019-01-09 09:38:49 +01:00
vkms drm/vkms: set preferred depth to 24 2018-12-17 10:51:20 +01:00
vmwgfx IOMMU Updates for Linux v4.21 2019-01-01 15:55:29 -08:00
xen drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
zte drm/edid: Pass connector to AVI infoframe functions 2019-01-10 19:01:06 +02:00
ati_pcigart.c drm/ati_pcigart: Fix error code in drm_ati_pcigart_init() 2018-12-17 10:47:17 +01:00
drm_agpsupport.c
drm_atomic_helper.c Final changes to drm-misc-next for v4.21: 2018-12-07 11:23:05 +10:00
drm_atomic_state_helper.c drm: Put damage blob when destroy plane state 2018-12-24 11:53:50 +01:00
drm_atomic_uapi.c
drm_atomic.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_auth.c
drm_blend.c
drm_bridge.c drm: bridge: Constify mode arguments to bridge .mode_set() operation 2019-01-14 03:51:14 +02:00
drm_bufs.c drm: un-inline drm_legacy_findmap() 2019-01-02 11:37:11 +02:00
drm_cache.c
drm_client.c
drm_color_mgmt.c drm: Add color management LUT validation helper (v4) 2019-01-23 16:29:32 -08:00
drm_connector.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_context.c drm: Fix error handling in drm_legacy_addctx 2019-01-07 11:26:31 +01:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: Remove use of drm_mode_object 2019-01-15 13:20:56 +01:00
drm_crtc_internal.h drm: Unexport drm_crtc_force_disable 2019-01-11 15:56:40 +01:00
drm_crtc.c drm: Move the legacy kms disable_all helper to crtc helpers 2019-01-11 22:54:29 +01:00
drm_damage_helper.c drm/damage-helper: Add drm_atomic_helper_damage_merged() 2019-01-17 10:56:54 +01:00
drm_debugfs_crc.c
drm_debugfs.c
drm_dma.c
drm_dp_aux_dev.c
drm_dp_cec.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm-misc-next for 5.1: 2019-01-24 20:02:12 +10:00
drm_dp_mst_topology.c drm/dp_mst: Check payload count in drm_dp_mst_atomic_check() 2019-01-10 20:45:25 -05:00
drm_drv.c drm/docs: improve docs for drm_drv.c 2019-01-12 13:07:30 +01:00
drm_dsc.c
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/edid: Add display_info.rgb_quant_range_selectable 2019-01-10 19:01:06 +02:00
drm_encoder_slave.c
drm_encoder.c
drm_fb_cma_helper.c drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
drm_fb_helper.c drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
drm_file.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
drm_flip_work.c drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
drm_fourcc.c
drm_framebuffer.c drm: move EXPORT_SYMBOL_FOR_TESTS_ONLY to drm_util.h 2019-01-14 10:58:37 +01:00
drm_gem_cma_helper.c
drm_gem_framebuffer_helper.c drm/gem-fb-helper: Add drm_gem_fb_create_with_dirty() 2019-01-17 10:56:45 +01:00
drm_gem.c drm/gem: Mark pinned pages as unevictable 2019-01-09 21:24:50 +00:00
drm_hashtab.c
drm_internal.h drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_ioc32.c
drm_ioctl.c drm/ioctl: Fix Spectre v1 vulnerabilities 2018-12-20 08:13:29 +01:00
drm_irq.c
drm_kms_helper_common.c
drm_lease.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_mode_object.c drm: Reorder set_property_atomic to avoid returning with an active ww_ctx 2019-01-03 09:54:26 +00:00
drm_modes.c drm: Remove use of drm_mode_object 2019-01-15 13:20:56 +01:00
drm_modeset_helper.c
drm_modeset_lock.c drm/atomic: integrate modeset lock with private objects 2018-12-11 15:24:30 +01:00
drm_of.c drm/of: Fix kerneldoc 2019-01-12 13:07:58 +01:00
drm_panel_orientation_quirks.c
drm_panel.c drm/panel: Small documentation polish 2019-01-12 13:08:12 +01:00
drm_pci.c
drm_plane_helper.c
drm_plane.c drm: Auto-set allow_fb_modifiers when given modifiers at plane init 2019-01-11 16:53:55 +01:00
drm_prime.c
drm_print.c
drm_probe_helper.c
drm_property.c
drm_rect.c
drm_scatter.c
drm_scdc_helper.c
drm_simple_kms_helper.c
drm_syncobj.c drm/syncobj: remove drm_syncobj_cb and cleanup 2018-12-11 17:38:38 +01:00
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank.c drm/vblank: Allow dynamic per-crtc max_vblank_count 2019-01-14 21:23:55 +02:00
drm_vm.c
drm_vma_manager.c
drm_writeback.c
Kconfig drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
Makefile