OSDN Git Service

drm/i915/gt: Restore aggressive post-boost downclocking
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 29 Apr 2020 20:54:46 +0000 (21:54 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 29 Apr 2020 23:57:38 +0000 (00:57 +0100)
We reduced the clocks slowly after a boost event based on the
observation that the smoothness of animations suffered. However, since
reducing the evalution intervals, we should be able to respond to the
rapidly fluctuating workload of a simple desktop animation and so
restore the more aggressive downclocking.

References: 2a8862d2f3da ("drm/i915: Reduce the RPS shock")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Andi Shyti <andi.shyti@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200429205446.3259-6-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_rps.c

index 1716d6d..c682355 100644 (file)
@@ -1680,30 +1680,18 @@ static void rps_work(struct work_struct *work)
                adj = 0;
        }
 
-       rps->last_adj = adj;
-
        /*
-        * Limit deboosting and boosting to keep ourselves at the extremes
-        * when in the respective power modes (i.e. slowly decrease frequencies
-        * while in the HIGH_POWER zone and slowly increase frequencies while
-        * in the LOW_POWER zone). On idle, we will hit the timeout and drop
-        * to the next level quickly, and conversely if busy we expect to
-        * hit a waitboost and rapidly switch into max power.
-        */
-       if ((adj < 0 && rps->power.mode == HIGH_POWER) ||
-           (adj > 0 && rps->power.mode == LOW_POWER))
-               rps->last_adj = 0;
-
-       /* sysfs frequency interfaces may have snuck in while servicing the
-        * interrupt
+        * sysfs frequency limits may have snuck in while
+        * servicing the interrupt
         */
        new_freq += adj;
        new_freq = clamp_t(int, new_freq, min, max);
 
        if (intel_rps_set(rps, new_freq)) {
                drm_dbg(&i915->drm, "Failed to set new GPU frequency\n");
-               rps->last_adj = 0;
+               adj = 0;
        }
+       rps->last_adj = adj;
 
        mutex_unlock(&rps->lock);