• Chris Wilson's avatar
    drm/i915: Restrict pagefault disabling to just around copy_from_user() · ebc0808f
    Chris Wilson authored
    When handling execbuf relocations, we play a delicate dance with
    pagefault. We first try to access the user pages underneath our
    struct_mutex. However, if those pages were inside a GEM object, we may
    trigger a pagefault and deadlock as i915_gem_fault() tries to
    recursively acquire struct_mutex. Instead, we choose to disable
    pagefaulting around the copy_from_user whilst inside the struct_mutex
    and handle the EFAULT by falling back to a copy outside the
    struct_mutex.
    
    We however presumed that disabling pagefaults would be expensive. It is
    just an operation on the local current task. Cheap enough that we can
    restrict the disable/enable to the critical section around the copy, and
    so avoid having to handle the atomic sections within the relocation
    handling itself.
    
    v2: Just illustrate the broken error handling rather than argue why it
    is safer to ignore it, for now.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161018120251.25043-4-chris@chris-wilson.co.uk
    ebc0808f
i915_gem_execbuffer.c 53.4 KB