diff options
author | Chris Wilson | 2018-02-06 15:31:37 +0100 |
---|---|---|
committer | Chris Wilson | 2018-02-08 12:27:40 +0100 |
commit | 253a281727d552200c4cddb0cc08cb2e95939603 (patch) | |
tree | f927baf3a517fa26d7ba042200d13a83658e3335 /drivers/gpu/drm/i915/i915_gem_request.c | |
parent | drm/i915/perf: Fix compiler warning for string truncation (diff) | |
download | kernel-qcow2-linux-253a281727d552200c4cddb0cc08cb2e95939603.tar.gz kernel-qcow2-linux-253a281727d552200c4cddb0cc08cb2e95939603.tar.xz kernel-qcow2-linux-253a281727d552200c4cddb0cc08cb2e95939603.zip |
drm/i915: Remove superfluous worker wakeups when RPS is already boosted
We only need to wake up the RPS worker once when initially enabling the
client boost, it remains in effect then until the last client no longer
requires the boost.
References: https://bugs.freedesktop.org/show_bug.cgi?id=102250
References: 7b92c1bd0540 ("drm/i915: Avoid keeping waitboost active for signaling threads")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Michał Winiarski <michal.winiarski@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180206143137.15509-1-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_request.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_request.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index a8eb22a95b0f..8a35b5591e0e 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -443,12 +443,14 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request) engine->last_retired_context = request->ctx; spin_lock_irq(&request->lock); - if (request->waitboost) - atomic_dec(&request->i915->gt_pm.rps.num_waiters); if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &request->fence.flags)) dma_fence_signal_locked(&request->fence); if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &request->fence.flags)) intel_engine_cancel_signaling(request); + if (request->waitboost) { + GEM_BUG_ON(!atomic_read(&request->i915->gt_pm.rps.num_waiters)); + atomic_dec(&request->i915->gt_pm.rps.num_waiters); + } spin_unlock_irq(&request->lock); i915_priotree_fini(request->i915, &request->priotree); |