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: Chris Wilson <chris@chris-wilson.co.uk> Cc: Abdiel Janulgue <abdiel.janulgue@linux.intel.com> Reviewed-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190902040303.14195-4-chris@chris-wilson.co.uk
This commit is contained in:
Родитель
f269007446
Коммит
8f9fb61cae
|
@ -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 @@ err_rpm:
|
|||
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 @@ err:
|
|||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче