]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
drm/i915: Align the retire_requests worker to the nearest second
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 5 Oct 2012 16:02:57 +0000 (17:02 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 8 Oct 2012 16:45:21 +0000 (18:45 +0200)
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: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index ca3ab04c53739e26a0a42f6ff6d24481570ad82d..eb3316bb4c3c0227f9c03cc19ee8c0785320ed21 100644 (file)
@@ -2019,7 +2019,8 @@ i915_add_request(struct intel_ring_buffer *ring,
                }
                if (was_empty) {
                        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);
                }
        }
@@ -2208,7 +2209,8 @@ i915_gem_retire_work_handler(struct work_struct *work)
 
        /* Come back later if the device is busy... */
        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;
        }
 
@@ -2226,7 +2228,8 @@ i915_gem_retire_work_handler(struct work_struct *work)
        }
 
        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)
                intel_mark_idle(dev);