drm/i915: Simplify userptr locking
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 10 Jun 2021 14:35:25 +0000 (16:35 +0200)
committerMatthew Auld <matthew.auld@intel.com>
Mon, 14 Jun 2021 11:23:49 +0000 (12:23 +0100)
commitb4b9731b02c3ce859d85dec17ec63f4bf3140bf4
treeaecfa6ed9de8951da90fd80dda145a005c356c87
parent35c6367f516090a3086d37e7023b08608d555aba
drm/i915: Simplify userptr locking

Use an rwlock instead of spinlock for the global notifier lock
to reduce risk of contention in execbuf.

Protect object state with the object lock whenever possible rather
than with the global notifier lock

Don't take an explicit page_ref in userptr_submit_init() but rather
call get_pages() after obtaining the page list so that
get_pages() holds the page_ref. This means we don't need to call
userptr_submit_fini(), which is needed to avoid awkward locking
in our upcoming VM_BIND code.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210610143525.624677-1-thomas.hellstrom@linux.intel.com
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
drivers/gpu/drm/i915/gem/i915_gem_object.h
drivers/gpu/drm/i915/gem/i915_gem_userptr.c
drivers/gpu/drm/i915/i915_drv.h