drm/i915: Avoid blocking the kworker thread on a stuck mutex
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 29 Sep 2010 11:26:37 +0000 (12:26 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 29 Sep 2010 11:26:37 +0000 (12:26 +0100)
Just reschedule the retire requests again if the device is currently
busy. The request list will be pruned along other paths so will never
grow unbounded and so we can afford to miss the occasional pruning.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_gem.c

index 9a8e6752e009ce05872e911f7a48a549b03b0c1a..fe1424c6c3fa502e28ce00b43e921ed317327d5f 100644 (file)
@@ -1901,7 +1901,12 @@ i915_gem_retire_work_handler(struct work_struct *work)
                                mm.retire_work.work);
        dev = dev_priv->dev;
 
-       mutex_lock(&dev->struct_mutex);
+       /* 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);
+               return;
+       }
+
        i915_gem_retire_requests(dev);
 
        if (!dev_priv->mm.suspended &&