Commit 8f9fb61c authored by Chris Wilson's avatar Chris Wilson

drm/i915: Refresh the errno to vmf_fault translations

It's been a long time since we accidentally reported -EIO upon wedging,
it can now only be generated by failure to swap in a page.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: default avatarAbdiel Janulgue <abdiel.janulgue@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190902040303.14195-4-chris@chris-wilson.co.uk
parent f2690074
...@@ -287,6 +287,9 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf) ...@@ -287,6 +287,9 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
view.type = I915_GGTT_VIEW_PARTIAL; view.type = I915_GGTT_VIEW_PARTIAL;
vma = i915_gem_object_ggtt_pin(obj, &view, 0, 0, flags); vma = i915_gem_object_ggtt_pin(obj, &view, 0, 0, flags);
} }
/* The entire mappable GGTT is pinned? Unexpected! */
GEM_BUG_ON(vma == ERR_PTR(-ENOSPC));
} }
if (IS_ERR(vma)) { if (IS_ERR(vma)) {
ret = PTR_ERR(vma); ret = PTR_ERR(vma);
...@@ -333,23 +336,19 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf) ...@@ -333,23 +336,19 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
i915_gem_object_unpin_pages(obj); i915_gem_object_unpin_pages(obj);
err: err:
switch (ret) { switch (ret) {
case -EIO: default:
/* WARN_ONCE(ret, "unhandled error in %s: %i\n", __func__, ret);
* We eat errors when the gpu is terminally wedged to avoid /* fallthrough */
* userspace unduly crashing (gl has no provisions for mmaps to case -EIO: /* shmemfs failure from swap device */
* fail). But any other -EIO isn't ours (e.g. swap in failure) case -EFAULT: /* purged object */
* and so needs to be reported. return VM_FAULT_SIGBUS;
*/
if (!intel_gt_is_wedged(ggtt->vm.gt)) case -ENOSPC: /* shmemfs allocation failure */
return VM_FAULT_SIGBUS; case -ENOMEM: /* our allocation failure */
/* else, fall through */ return VM_FAULT_OOM;
case -EAGAIN:
/*
* EAGAIN means the gpu is hung and we'll wait for the error
* handler to reset everything when re-faulting in
* i915_mutex_lock_interruptible.
*/
case 0: case 0:
case -EAGAIN:
case -ERESTARTSYS: case -ERESTARTSYS:
case -EINTR: case -EINTR:
case -EBUSY: case -EBUSY:
...@@ -358,14 +357,6 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf) ...@@ -358,14 +357,6 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
* already did the job. * already did the job.
*/ */
return VM_FAULT_NOPAGE; return VM_FAULT_NOPAGE;
case -ENOMEM:
return VM_FAULT_OOM;
case -ENOSPC:
case -EFAULT:
return VM_FAULT_SIGBUS;
default:
WARN_ONCE(ret, "unhandled error in %s: %i\n", __func__, ret);
return VM_FAULT_SIGBUS;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment