summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson2014-07-11 12:28:00 +0200
committerDaniel Vetter2014-07-23 07:05:28 +0200
commita1db2fa7c8325a380792d66908b2f982cf047837 (patch)
tree4f8c8025d34309373d84fc4175d535acc5c0f445 /drivers/gpu/drm/i915/i915_gem.c
parentdrm/i915: Also give the sprite width for WM computation (diff)
downloadkernel-qcow2-linux-a1db2fa7c8325a380792d66908b2f982cf047837.tar.gz
kernel-qcow2-linux-a1db2fa7c8325a380792d66908b2f982cf047837.tar.xz
kernel-qcow2-linux-a1db2fa7c8325a380792d66908b2f982cf047837.zip
drm/i915: Abandon oom quickly if killed by a signal
Whilst waiting to obtain our locks for the last resort shrinking before an oom, we check whether or not a fatal signal was pending. If there was, we do not need to keep waiting as the oom will be aborted. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index e5d4d73a9844..ef047bce008d 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5194,8 +5194,11 @@ i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr)
bool was_interruptible;
bool unlock;
- while (!i915_gem_shrinker_lock(dev, &unlock) && --timeout)
+ while (!i915_gem_shrinker_lock(dev, &unlock) && --timeout) {
schedule_timeout_killable(1);
+ if (fatal_signal_pending(current))
+ return NOTIFY_DONE;
+ }
if (timeout == 0) {
pr_err("Unable to purge GPU memory due lock contention.\n");
return NOTIFY_DONE;