diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-08-29 16:44:10 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2016-08-29 16:44:10 -0400 |
commit | 4fcbce45b0ad010d8b0c9e9366fe9c1bbe5b3d9f (patch) | |
tree | 283025b27465a8e11251d7cd09cf974f4076e90d | |
parent | 8e2e682c8c8569faa0d5241198775a7330597653 (diff) | |
download | 4.8-rt-patches-4fcbce45b0ad010d8b0c9e9366fe9c1bbe5b3d9f.tar.gz |
i915: drop upstream patch
-rw-r--r-- | patches/drm-i915-Use-consistent-forcewake-auto-release-timeo.patch | 151 | ||||
-rw-r--r-- | patches/series | 1 |
2 files changed, 0 insertions, 152 deletions
diff --git a/patches/drm-i915-Use-consistent-forcewake-auto-release-timeo.patch b/patches/drm-i915-Use-consistent-forcewake-auto-release-timeo.patch deleted file mode 100644 index 0f2cdf98c7ca31..00000000000000 --- a/patches/drm-i915-Use-consistent-forcewake-auto-release-timeo.patch +++ /dev/null @@ -1,151 +0,0 @@ -From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> -Date: Thu, 7 Apr 2016 17:04:32 +0100 -Subject: [PATCH] drm/i915: Use consistent forcewake auto-release timeout - across kernel configs - -Upstream commit fde61b596b994195b9dd83feb325df95d99702ce - -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> -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - drivers/gpu/drm/i915/i915_drv.h | 2 +- - drivers/gpu/drm/i915/intel_uncore.c | 25 ++++++++++++++++--------- - 2 files changed, 17 insertions(+), 10 deletions(-) - ---- a/drivers/gpu/drm/i915/i915_drv.h -+++ b/drivers/gpu/drm/i915/i915_drv.h -@@ -714,7 +714,7 @@ struct intel_uncore { - struct drm_i915_private *i915; - enum forcewake_domain_id id; - unsigned wake_count; -- struct timer_list timer; -+ struct hrtimer timer; - i915_reg_t reg_set; - u32 val_set; - u32 val_clear; ---- a/drivers/gpu/drm/i915/intel_uncore.c -+++ b/drivers/gpu/drm/i915/intel_uncore.c -@@ -60,7 +60,11 @@ fw_domain_reset(const struct intel_uncor - static inline void - fw_domain_arm_timer(struct intel_uncore_forcewake_domain *d) - { -- mod_timer_pinned(&d->timer, jiffies + 1); -+ d->wake_count++; -+ hrtimer_start_range_ns(&d->timer, -+ ktime_set(0, NSEC_PER_MSEC), -+ NSEC_PER_MSEC, -+ HRTIMER_MODE_REL); - } - - static inline void -@@ -224,9 +228,11 @@ static int __gen6_gt_wait_for_fifo(struc - return ret; - } - --static void intel_uncore_fw_release_timer(unsigned long arg) -+static enum hrtimer_restart -+intel_uncore_fw_release_timer(struct hrtimer *timer) - { -- struct intel_uncore_forcewake_domain *domain = (void *)arg; -+ struct intel_uncore_forcewake_domain *domain = -+ container_of(timer, struct intel_uncore_forcewake_domain, timer); - unsigned long irqflags; - - assert_rpm_device_not_suspended(domain->i915); -@@ -240,6 +246,8 @@ static void intel_uncore_fw_release_time - 1 << domain->id); - - spin_unlock_irqrestore(&domain->i915->uncore.lock, irqflags); -+ -+ return HRTIMER_NORESTART; - } - - void intel_uncore_forcewake_reset(struct drm_device *dev, bool restore) -@@ -259,16 +267,16 @@ void intel_uncore_forcewake_reset(struct - active_domains = 0; - - for_each_fw_domain(domain, dev_priv, id) { -- if (del_timer_sync(&domain->timer) == 0) -+ if (hrtimer_cancel(&domain->timer) == 0) - continue; - -- intel_uncore_fw_release_timer((unsigned long)domain); -+ intel_uncore_fw_release_timer(&domain->timer); - } - - spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); - - for_each_fw_domain(domain, dev_priv, id) { -- if (timer_pending(&domain->timer)) -+ if (hrtimer_active(&domain->timer)) - active_domains |= (1 << id); - } - -@@ -491,7 +499,6 @@ static void __intel_uncore_forcewake_put - if (--domain->wake_count) - continue; - -- domain->wake_count++; - fw_domain_arm_timer(domain); - } - } -@@ -732,7 +739,6 @@ static inline void __force_wake_get(stru - continue; - } - -- domain->wake_count++; - fw_domain_arm_timer(domain); - } - -@@ -1150,7 +1156,8 @@ static void fw_domain_init(struct drm_i9 - d->i915 = dev_priv; - d->id = domain_id; - -- setup_timer(&d->timer, intel_uncore_fw_release_timer, (unsigned long)d); -+ hrtimer_init(&d->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); -+ d->timer.function = intel_uncore_fw_release_timer; - - dev_priv->uncore.fw_domains |= (1 << domain_id); - diff --git a/patches/series b/patches/series index 2ad299e6b24433..0376db0cd06ced 100644 --- a/patches/series +++ b/patches/series @@ -8,7 +8,6 @@ tracing-Show-the-preempt-count-of-when-the-event-was.patch # timer: "Refactor the timer wheel v4' + 2 prerequisites -drm-i915-Use-consistent-forcewake-auto-release-timeo.patch timer-add-setup_deferrable_timer-macro.patch timer-Make-pinned-a-timer-property.patch |