[PATCH 7/7] be-boostier

Chris Wilson chris at chris-wilson.co.uk
Sat Apr 25 15:52:42 UTC 2020


---
 drivers/gpu/drm/i915/gt/intel_rps.c       | 9 +++++++--
 drivers/gpu/drm/i915/gt/intel_rps_types.h | 1 +
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
index f1994e0cdba9..58e8dbf6a7ea 100644
--- a/drivers/gpu/drm/i915/gt/intel_rps.c
+++ b/drivers/gpu/drm/i915/gt/intel_rps.c
@@ -71,23 +71,28 @@ static void rps_timer(struct timer_list *t)
 		if (10 * max_busy > 9 * dt && /* >90% busy */
 		    rps->cur_freq < rps->max_freq_softlimit) {
 			rps->pm_iir |= GEN6_PM_RP_UP_THRESHOLD;
+			rps->pm_interval = 1;
 			schedule_work(&rps->work);
 		} else if (4 * max_busy < 3 * dt && /* <75% busy */
 			   rps->cur_freq > rps->min_freq_softlimit) {
 			rps->pm_iir |= GEN6_PM_RP_DOWN_THRESHOLD;
+			rps->pm_interval = 1;
 			schedule_work(&rps->work);
 		} else {
 			rps->last_adj = 0;
 		}
 
-		mod_timer(&rps->timer, jiffies + msecs_to_jiffies_timeout(5));
+		mod_timer(&rps->timer,
+			  jiffies + msecs_to_jiffies(rps->pm_interval));
+		rps->pm_interval = min(rps->pm_interval + 1, 15u);
 	}
 }
 
 static void rps_start_timer(struct intel_rps *rps)
 {
 	rps->pm_timestamp = ktime_sub(ktime_get(), rps->pm_timestamp);
-	mod_timer(&rps->timer, jiffies + msecs_to_jiffies_timeout(1));
+	rps->pm_interval = 1;
+	mod_timer(&rps->timer, jiffies + 1);
 }
 
 static void rps_stop_timer(struct intel_rps *rps)
diff --git a/drivers/gpu/drm/i915/gt/intel_rps_types.h b/drivers/gpu/drm/i915/gt/intel_rps_types.h
index 804e2ccc0ea8..38083f0402d9 100644
--- a/drivers/gpu/drm/i915/gt/intel_rps_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_rps_types.h
@@ -50,6 +50,7 @@ struct intel_rps {
 	unsigned long flags;
 
 	ktime_t pm_timestamp;
+	u32 pm_interval;
 	u32 pm_iir;
 
 	/* PM interrupt bits that should never be masked */
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list