drm/i915: Align the hangcheck wakeup to the nearest second
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 5 Oct 2012 16:02:56 +0000 (17:02 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 8 Oct 2012 16:44:36 +0000 (18:44 +0200)
round_jiffies() aligns the wakeup time to the nearest second in order to
batch wakeups and reduce system load, which is useful for unimportant
coarse timers like our hangcheck.

v2: round_jiffies_relative() returns the relative jiffie value, whereas
we need the absolute value for 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_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_irq.c

index af5ceb46e7bdd725b08f8ca383ecde638a055731..7f05736c6d8a7b167a638d30ba5a04c05f836b86 100644 (file)
@@ -452,6 +452,7 @@ typedef struct drm_i915_private {
 
        /* For hangcheck timer */
 #define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
+#define DRM_I915_HANGCHECK_JIFFIES msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)
        struct timer_list hangcheck_timer;
        int hangcheck_count;
        uint32_t last_acthd[I915_NUM_RINGS];
index 2f76905ab2b07408dd3c784799c7177f5d0ff6c0..ca3ab04c53739e26a0a42f6ff6d24481570ad82d 100644 (file)
@@ -2015,8 +2015,7 @@ i915_add_request(struct intel_ring_buffer *ring,
        if (!dev_priv->mm.suspended) {
                if (i915_enable_hangcheck) {
                        mod_timer(&dev_priv->hangcheck_timer,
-                                 jiffies +
-                                 msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD));
+                                 round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
                }
                if (was_empty) {
                        queue_delayed_work(dev_priv->wq,
index 337c5cdf5598fe81a4c469dbe10376fa7d75ab74..1406d79251adef32f86fe13ad39dc76d1a552338 100644 (file)
@@ -353,8 +353,7 @@ static void notify_ring(struct drm_device *dev,
        if (i915_enable_hangcheck) {
                dev_priv->hangcheck_count = 0;
                mod_timer(&dev_priv->hangcheck_timer,
-                         jiffies +
-                         msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD));
+                         round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
        }
 }
 
@@ -1752,7 +1751,7 @@ void i915_hangcheck_elapsed(unsigned long data)
 repeat:
        /* Reset timer case chip hangs without another request being added */
        mod_timer(&dev_priv->hangcheck_timer,
-                 jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD));
+                 round_jiffies_up(jiffies + DRM_I915_HANGCHECK_JIFFIES));
 }
 
 /* drm_dma.h hooks