drm/i915: Introduce DRM_I915_THROTTLE_JIFFIES
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 21 May 2015 20:01:48 +0000 (21:01 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 22 May 2015 06:59:52 +0000 (08:59 +0200)
As Daniel commented on

commit b7ffe1362c5f468b853223acc9268804aa92afc8
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon Apr 27 13:41:24 2015 +0100

    drm/i915: Free RPS boosts for all laggards

it is better to be explicit when sharing hardcoded values such as
throttle/boost timeouts. Make it so!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
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/intel_pm.c

index 44d592f3b67c54ac408ea45b717712e3f9739e48..1038f5c7f15b1c4e609a7f8c043fd63b1fb466a6 100644 (file)
@@ -279,6 +279,12 @@ struct drm_i915_file_private {
        struct {
                spinlock_t lock;
                struct list_head request_list;
+/* 20ms is a fairly arbitrary limit (greater than the average frame time)
+ * chosen to prevent the CPU getting more than a frame ahead of the GPU
+ * (when using lax throttling for the frontbuffer). We also use it to
+ * offer free GPU waitboosts for severely congested workloads.
+ */
+#define DRM_I915_THROTTLE_JIFFIES msecs_to_jiffies(20)
        } mm;
        struct idr context_idr;
 
index 0ce3e4b3059eda516f1c15541a2da6a8aba7da80..cc206f199d669a79410c77e357b7a1251ee8a539 100644 (file)
@@ -4239,7 +4239,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct drm_i915_file_private *file_priv = file->driver_priv;
-       unsigned long recent_enough = jiffies - msecs_to_jiffies(20);
+       unsigned long recent_enough = jiffies - DRM_I915_THROTTLE_JIFFIES;
        struct drm_i915_gem_request *request, *target = NULL;
        unsigned reset_counter;
        int ret;
index 84809a67fac8145f4787bf87ae625c41caf6745d..55d993110d5132107fbd97d9a259a9391b1eff43 100644 (file)
@@ -4158,7 +4158,7 @@ void gen6_rps_boost(struct drm_i915_private *dev_priv,
        /* Force a RPS boost (and don't count it against the client) if
         * the GPU is severely congested.
         */
-       if (rps && time_after(jiffies, submitted + msecs_to_jiffies(20)))
+       if (rps && time_after(jiffies, submitted + DRM_I915_THROTTLE_JIFFIES))
                rps = NULL;
 
        mutex_lock(&dev_priv->rps.hw_lock);