On 26/01/16 15:18, Chris Wilson wrote:
On Tue, Jan 26, 2016 at 02:53:30PM +0000, Tvrtko Ursulin wrote:
From: Tvrtko Ursulin <[email protected]>

Will be used from multiple callers in a following patch.

Signed-off-by: Tvrtko Ursulin <[email protected]>
---
  drivers/gpu/drm/i915/i915_gem.c | 91 ++++++++++++++++++++++-------------------
  1 file changed, 49 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index af15c290c71d..dacf6a0013c5 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1772,6 +1772,53 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
        return 0;
  }

+static int
+i915_gem_ret_to_vm_ret(struct drm_i915_private *dev_priv, int ret)
+{
+       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 (!i915_terminally_wedged(&dev_priv->gpu_error)) {
+                       ret = VM_FAULT_SIGBUS;
+                       break;
+               }
+       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 -ERESTARTSYS:
+       case -EINTR:
+       case -EBUSY:
+               /*
+                * EBUSY is ok: this just means that another thread
+                * already did the job.
+                */
+               ret = VM_FAULT_NOPAGE;
+               break;
+       case -ENOMEM:
+               ret = VM_FAULT_OOM;
+               break;
+       case -ENOSPC:
+       case -EFAULT:
+               ret = VM_FAULT_SIGBUS;
+               break;
+       default:
+               WARN_ONCE(ret, "unhandled error in page fault\n");
+               ret = VM_FAULT_SIGBUS;
+               break;
+       }

So without having to pin (plus a few other similar changes), we only need
to report

-ENOMEM, -ENOSPC, -EIO (from shmemfs) and -EFAULT (get_pages).

Given that I'd rather have the reasoning behind each explicit.

This is just existing code factored out so I am not sure what you are suggesting?

Regards,

Tvrtko


_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to