• Maarten Lankhorst's avatar
    drm/i915: Fix userptr so we do not have to worry about obj->mm.lock, v7. · ed29c269
    Maarten Lankhorst authored
    Instead of doing what we do currently, which will never work with
    PROVE_LOCKING, do the same as AMD does, and something similar to
    relocation slowpath. When all locks are dropped, we acquire the
    pages for pinning. When the locks are taken, we transfer those
    pages in .get_pages() to the bo. As a final check before installing
    the fences, we ensure that the mmu notifier was not called; if it is,
    we return -EAGAIN to userspace to signal it has to start over.
    
    Changes since v1:
    - Unbinding is done in submit_init only. submit_begin() removed.
    - MMU_NOTFIER -> MMU_NOTIFIER
    Changes since v2:
    - Make i915->mm.notifier a spinlock.
    Changes since v3:
    - Add WARN_ON if there are any page references left, should have been 0.
    - Return 0 on success in submit_init(), bug from spinlock conversion.
    - Release pvec outside of notifier_lock (Thomas).
    Changes since v4:
    - Mention why we're clearing eb->[i + 1].vma in the code. (Thomas)
    - Actually check all invalidations in eb_move_to_gpu. (Thomas)
    - Do not wait when process is exiting to fix gem_ctx_persistence.userptr.
    Changes since v5:
    - Clarify why check on PF_EXITING is (temporarily) required.
    Changes since v6:
    - Ensure userptr validity is checked in set_domain through a special path.
    Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Acked-by: default avatarDave Airlie <airlied@redhat.com>
    [danvet: s/kfree/kvfree/ in i915_gem_object_userptr_drop_ref in the
    previous review round, but which got lost. The other open questions
    around page refcount are imo better discussed in a separate series,
    with amdgpu folks involved].
    Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210323155059.628690-17-maarten.lankhorst@linux.intel.com
    ed29c269
i915_gem_userptr.c 15.5 KB