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: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Abdiel Janulgue <abdiel.janul...@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 39 +++++++++---------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index 261c9bd83f51..82db2b783123 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -287,6 +287,9 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
                        view.type = I915_GGTT_VIEW_PARTIAL;
                        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)) {
                ret = PTR_ERR(vma);
@@ -333,23 +336,19 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
        i915_gem_object_unpin_pages(obj);
 err:
        switch (ret) {
-       case -EIO:
-               /*
-                * We eat errors when the gpu is terminally wedged to avoid
-                * userspace unduly crashing (gl has no provisions for mmaps to
-                * fail). But any other -EIO isn't ours (e.g. swap in failure)
-                * and so needs to be reported.
-                */
-               if (!intel_gt_is_wedged(ggtt->vm.gt))
-                       return VM_FAULT_SIGBUS;
-               /* else, fall through */
-       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.
-                */
+       default:
+               WARN_ONCE(ret, "unhandled error in %s: %i\n", __func__, ret);
+               /* fallthrough */
+       case -EIO: /* shmemfs failure from swap device */
+       case -EFAULT: /* purged object */
+               return VM_FAULT_SIGBUS;
+
+       case -ENOSPC: /* shmemfs allocation failure */
+       case -ENOMEM: /* our allocation failure */
+               return VM_FAULT_OOM;
+
        case 0:
+       case -EAGAIN:
        case -ERESTARTSYS:
        case -EINTR:
        case -EBUSY:
@@ -358,14 +357,6 @@ vm_fault_t i915_gem_fault(struct vm_fault *vmf)
                 * already did the job.
                 */
                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;
        }
 }
 
-- 
2.23.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to