Commit bcb45086 authored by Chris Wilson's avatar Chris Wilson Committed by Daniel Vetter

drm/i915: Align the retire_requests worker to the nearest second

By using round_jiffies() we can align the wakeup of our worker to the
nearest second in order to batch wakeups and reduce system load, which
is useful for unimportant coarse tasks like our retire_requests.

v2: round_jiffies_relative() already returns the relative timeout value,
so no need to incorrectly perform the subtraction twice. The timer
interface still leaves the possibility for the value of jiffies to
change be we program the timer.
Suggested-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent cecc21fe
...@@ -2019,7 +2019,8 @@ i915_add_request(struct intel_ring_buffer *ring, ...@@ -2019,7 +2019,8 @@ i915_add_request(struct intel_ring_buffer *ring,
} }
if (was_empty) { if (was_empty) {
queue_delayed_work(dev_priv->wq, queue_delayed_work(dev_priv->wq,
&dev_priv->mm.retire_work, HZ); &dev_priv->mm.retire_work,
round_jiffies_up_relative(HZ));
intel_mark_busy(dev_priv->dev); intel_mark_busy(dev_priv->dev);
} }
} }
...@@ -2208,7 +2209,8 @@ i915_gem_retire_work_handler(struct work_struct *work) ...@@ -2208,7 +2209,8 @@ i915_gem_retire_work_handler(struct work_struct *work)
/* Come back later if the device is busy... */ /* Come back later if the device is busy... */
if (!mutex_trylock(&dev->struct_mutex)) { if (!mutex_trylock(&dev->struct_mutex)) {
queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work,
round_jiffies_up_relative(HZ));
return; return;
} }
...@@ -2226,7 +2228,8 @@ i915_gem_retire_work_handler(struct work_struct *work) ...@@ -2226,7 +2228,8 @@ i915_gem_retire_work_handler(struct work_struct *work)
} }
if (!dev_priv->mm.suspended && !idle) if (!dev_priv->mm.suspended && !idle)
queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, HZ); queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work,
round_jiffies_up_relative(HZ));
if (idle) if (idle)
intel_mark_idle(dev); intel_mark_idle(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment