linux_dsm_epyc7002/drivers/gpu/drm/i915
Tvrtko Ursulin a57a4a67e5 drm/i915: Use consistent forcewake auto-release timeout across kernel configs
Because it is based on jiffies, current implementation releases the
forcewake at any time between straight away and between 1ms and 10ms,
depending on the kernel configuration (CONFIG_HZ).

This is probably not what has been desired, since the dynamics of keeping
parts of the GPU awake should not be correlated with this kernel
configuration parameter.

Change the auto-release mechanism to use hrtimers and set the timeout to
1ms with a 1ms of slack. This should make the GPU power consistent
across kernel configs, and timer slack should enable some timer coalescing
where multiple force-wake domains exist, or with unrelated timers.

For GlBench/T-Rex this decreases the number of forcewake releases from
~480 to ~300 per second, and for a heavy combined OGL/OCL test from
~670 to ~360 (HZ=1000 kernel).

Even though this reduction can be attributed to the average release period
extending from 0-1ms to 1-2ms, as discussed above, it will make the
forcewake timeout consistent for different CONFIG_HZ values.

Real life measurements with the above workload has shown that, with this
patch, both manage to auto-release the forcewake between 2-4 times per
10ms, even though the number of forcewake gets is dramatically different.

T-Rex requests between 5-10 explicit gets and 5-10 implict gets in each
10ms period, while the OGL/OCL test requests 250 and 380 times in the same
period.

The two data points together suggest that the nature of the forwake
accesses is bursty and that further changes and potential timeout
extensions, or moving the start of timeout from the first to the last
automatic forcewake grab, should be carefully measured for power and
performance effects.

v2:
  * Commit spelling. (Dave Gordon)
  * More discussion on numbers in the commit. (Chris Wilson)

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Dave Gordon <david.s.gordon@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
2016-04-12 14:30:41 +01:00
..
dvo_ch7xxx.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ch7017.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ivch.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_ns2501.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_sil164.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo_tfp410.c drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
dvo.h drm/i915: constify intel_dvo_dev_ops structures 2015-12-09 08:21:10 +01:00
i915_cmd_parser.c drm/i915: Bump command parser version for new whitelisted registers 2016-03-21 10:03:26 +01:00
i915_debugfs.c drm/i915: Harden detection of missed interrupts 2016-04-09 12:09:29 +01:00
i915_dma.c Revert "drm/i915: Fix races on fbdev" 2016-04-01 15:03:55 +03:00
i915_drv.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
i915_drv.h drm/i915: Use consistent forcewake auto-release timeout across kernel configs 2016-04-12 14:30:41 +01:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_debug.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_gem_dmabuf.c Linux 4.6-rc3 2016-04-11 19:25:13 +02:00
i915_gem_evict.c drm/i915: Rename vma->*_list to *_link for consistency 2016-02-26 13:15:39 +00:00
i915_gem_execbuffer.c drm,i915: Introduce drm_malloc_gfp() 2016-04-11 17:13:10 +01:00
i915_gem_fence.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2016-03-17 21:38:27 -07:00
i915_gem_gtt.c drm,i915: Introduce drm_malloc_gfp() 2016-04-11 17:13:10 +01:00
i915_gem_gtt.h drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_gem_render_state.c drm/i915: Rename intel_engine_cs struct members 2016-03-16 15:33:17 +00:00
i915_gem_render_state.h drm/i915: Rename intel_engine_cs function parameters 2016-03-16 15:33:10 +00:00
i915_gem_shrinker.c drm/i915/shrinker: Restrict vmap purge to objects with vmaps 2016-04-11 17:12:16 +01:00
i915_gem_stolen.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_gem_tiling.c
i915_gem_userptr.c drm/i915/userptr: Store i915 backpointer for i915_mm_struct 2016-04-11 20:39:16 +01:00
i915_gem.c Linux 4.6-rc3 2016-04-11 19:25:13 +02:00
i915_gpu_error.c drm/i915: Separate out the seqno-barrier from engine->get_seqno 2016-04-09 12:09:05 +01:00
i915_guc_reg.h drm/i915/guc: always reset GuC before loading firmware 2016-04-05 13:29:24 +01:00
i915_guc_submission.c drm/i915: replace for_each_engine() 2016-03-24 14:34:11 +00:00
i915_ioc32.c
i915_irq.c drm/i915: Harden detection of missed interrupts 2016-04-09 12:09:29 +01:00
i915_params.c drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_params.h drm/i915: Add fault injection support 2016-03-17 15:22:09 +02:00
i915_reg.h drm/i915: implement WaClearTdlStateAckDirtyBits 2016-04-11 11:59:43 +01:00
i915_suspend.c drm/i915/bxt: Don't save/restore eDP panel power during suspend (v3) 2016-02-08 11:32:32 +02:00
i915_sysfs.c drm/i915: Hold RPM reference while setting freq limits through sysfs 2016-03-02 18:50:47 +02:00
i915_trace_points.c
i915_trace.h drm/i915: Separate out the seqno-barrier from engine->get_seqno 2016-04-09 12:09:05 +01:00
i915_vgpu.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
i915_vgpu.h
intel_acpi.c
intel_atomic_plane.c drm/i915: Pass the correct crtc state to .update_plane() 2016-03-10 13:49:31 +02:00
intel_atomic.c drm/i915: Remove some post-commit members from intel_crtc->atomic, v3. 2016-03-16 14:50:25 +01:00
intel_audio.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_bios.c drm/i915: Get panel_type from OpRegion panel details 2016-04-12 13:23:43 +03:00
intel_bios.h drm/i915: hide away VBT private data in a separate header 2016-03-17 11:58:57 +02:00
intel_color.c drm/i915: Do not check crtc_state->active in intel_color_load_luts. 2016-03-31 12:46:07 +02:00
intel_crt.c drm/i915: Move HSW/BDW pll selection logic to intel_dpll_mgr.c 2016-03-09 11:55:31 +02:00
intel_csr.c drm/i915/csr: Allow matching unknown HW steppings with generic firmware 2016-03-16 17:53:00 +02:00
intel_ddi.c drm/i915/ddi: Silence compiler warning for unknown output type 2016-04-04 08:25:52 +01:00
intel_display.c drm/i915: Rename hw state checker to hw state verifier. 2016-04-11 10:34:17 +02:00
intel_dp_link_training.c drm/i915/dp: reduce missing TPS3 support errors to debug logging 2016-02-08 11:37:17 +02:00
intel_dp_mst.c drm/i915: Fix race condition in intel_dp_destroy_mst_connector() 2016-03-17 09:12:28 +01:00
intel_dp.c drm/i915: force full detect on sink count change 2016-04-01 10:20:22 +03:00
intel_dpll_mgr.c drm/i915/bxt: Reversed polarity of PORT_PLL_REF_SEL bit 2016-04-11 13:02:23 +03:00
intel_dpll_mgr.h drm/i915: Use a crtc mask instead of a refcount for dpll functions, v2. 2016-03-17 09:27:28 +01:00
intel_drv.h drm/i915: Use GPLL ref clock to calculate GPU freqs on VLV/CHV 2016-04-05 21:17:39 +03:00
intel_dsi_panel_vbt.c drm/i915: Sharing the pixel_format_from_vbt to whole i915 2016-04-07 16:46:06 +03:00
intel_dsi_pll.c drm/i915/bxt: Fix DSI HW state readout 2016-03-24 14:48:21 +02:00
intel_dsi.c drm/i915/BXT: Get pipe conf from the port registers 2016-04-07 16:46:09 +03:00
intel_dsi.h drm/i915: Sharing the pixel_format_from_vbt to whole i915 2016-04-07 16:46:06 +03:00
intel_dvo.c drm: Pass 'name' to drm_encoder_init() 2015-12-11 09:13:20 +01:00
intel_fbc.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
intel_fbdev.c Revert "drm/i915: Fix races on fbdev" 2016-04-01 15:03:55 +03:00
intel_fifo_underrun.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_frontbuffer.c
intel_guc_fwif.h drm/i915/guc: Decouple GuC engine id from ring id 2016-01-25 10:56:30 +00:00
intel_guc_loader.c drm/i915/guc: always reset GuC before loading firmware 2016-04-05 13:29:24 +01:00
intel_guc.h drm/i915/guc: Decouple GuC engine id from ring id 2016-01-25 10:56:30 +00:00
intel_hdmi.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_hotplug.c drm/i915: intel_hpd_init(): Fix suspend/resume reprobing 2016-01-13 10:49:42 +02:00
intel_i2c.c drm/i915: Make GMBUS timeout message DRM_DEBUG_KMS 2016-04-12 13:23:17 +03:00
intel_lrc.c drm/i915: implement WaClearTdlStateAckDirtyBits 2016-04-11 11:59:43 +01:00
intel_lrc.h drm/i915: Move execlists irq handler to a bottom half 2016-04-04 14:08:52 +01:00
intel_lvds.c drm/i915: fix deadlock on lid open 2016-03-30 12:17:13 +02:00
intel_mocs.c drm/i915: introduce for_each_engine_id() 2016-03-24 14:34:06 +00:00
intel_mocs.h
intel_modes.c
intel_opregion.c drm/i915: Get panel_type from OpRegion panel details 2016-04-12 13:23:43 +03:00
intel_overlay.c drm/i915: Refer to GGTT {,VM} consistently 2016-03-31 17:55:43 +03:00
intel_panel.c drm/i915/panel: setup pwm backlight based on connector type 2016-03-16 18:28:50 +02:00
intel_pm.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_psr.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h
intel_ringbuffer.c drm/i915: Refactor duplicate object vmap functions 2016-04-11 17:11:44 +01:00
intel_ringbuffer.h drm/i915: Replace manual barrier() with READ_ONCE() in HWS accessor 2016-04-09 12:09:59 +01:00
intel_runtime_pm.c drm/i915: Do not use {HAS_*, IS_*, INTEL_INFO}(dev_priv->dev) 2016-04-07 14:50:26 +03:00
intel_sdvo_regs.h drm/i915/sdvo: revert bogus kernel-doc comments to normal comments 2016-01-20 10:21:34 +02:00
intel_sdvo.c drm/i915: move sdvo mappings to vbt data 2016-03-29 15:12:30 +03:00
intel_sideband.c drm/i915: Extend gpio read/write to other cores 2016-02-04 19:11:17 +02:00
intel_sprite.c drm/i915: Fix plane init failure paths 2016-04-01 23:24:21 +03:00
intel_tv.c drm/i915: move VBT based TV presence check to intel_bios.c 2016-03-16 18:28:07 +02:00
intel_uncore.c drm/i915: Use consistent forcewake auto-release timeout across kernel configs 2016-04-12 14:30:41 +01:00
intel_vbt_defs.h drm/i915: Update VBT fields for child devices 2016-04-06 14:10:15 +03:00
Kconfig drm/i915: Kconfig for extra driver debugging 2016-03-03 17:26:57 +00:00
Kconfig.debug drm/i915: Kconfig for extra driver debugging 2016-03-03 17:26:57 +00:00
Makefile drm/i915: Extract out gamma table and CSC to their own file 2016-03-21 11:39:08 -07:00