mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 20:24:29 +07:00
drm/i915: Track GT wakeref
Record the wakeref used for keeping the device awake as the GPU is executing requests and be sure to cancel the tracking upon parking. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190114142129.24398-3-chris@chris-wilson.co.uk
This commit is contained in:
parent
16e4dd0342
commit
506d1f6245
@ -1979,7 +1979,7 @@ struct drm_i915_private {
|
||||
* In order to reduce the effect on performance, there
|
||||
* is a slight delay before we do so.
|
||||
*/
|
||||
bool awake;
|
||||
intel_wakeref_t awake;
|
||||
|
||||
/**
|
||||
* The number of times we have woken up.
|
||||
|
@ -138,6 +138,8 @@ int i915_mutex_lock_interruptible(struct drm_device *dev)
|
||||
|
||||
static u32 __i915_gem_park(struct drm_i915_private *i915)
|
||||
{
|
||||
intel_wakeref_t wakeref;
|
||||
|
||||
GEM_TRACE("\n");
|
||||
|
||||
lockdep_assert_held(&i915->drm.struct_mutex);
|
||||
@ -168,14 +170,15 @@ static u32 __i915_gem_park(struct drm_i915_private *i915)
|
||||
i915_pmu_gt_parked(i915);
|
||||
i915_vma_parked(i915);
|
||||
|
||||
i915->gt.awake = false;
|
||||
wakeref = fetch_and_zero(&i915->gt.awake);
|
||||
GEM_BUG_ON(!wakeref);
|
||||
|
||||
if (INTEL_GEN(i915) >= 6)
|
||||
gen6_rps_idle(i915);
|
||||
|
||||
intel_display_power_put(i915, POWER_DOMAIN_GT_IRQ);
|
||||
|
||||
intel_runtime_pm_put_unchecked(i915);
|
||||
intel_runtime_pm_put(i915, wakeref);
|
||||
|
||||
return i915->gt.epoch;
|
||||
}
|
||||
@ -204,7 +207,8 @@ void i915_gem_unpark(struct drm_i915_private *i915)
|
||||
if (i915->gt.awake)
|
||||
return;
|
||||
|
||||
intel_runtime_pm_get_noresume(i915);
|
||||
i915->gt.awake = intel_runtime_pm_get_noresume(i915);
|
||||
GEM_BUG_ON(!i915->gt.awake);
|
||||
|
||||
/*
|
||||
* It seems that the DMC likes to transition between the DC states a lot
|
||||
@ -219,7 +223,6 @@ void i915_gem_unpark(struct drm_i915_private *i915)
|
||||
*/
|
||||
intel_display_power_get(i915, POWER_DOMAIN_GT_IRQ);
|
||||
|
||||
i915->gt.awake = true;
|
||||
if (unlikely(++i915->gt.epoch == 0)) /* keep 0 as invalid */
|
||||
i915->gt.epoch = 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user