]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 15 Jan 2019 12:44:42 +0000 (12:44 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 15 Jan 2019 17:07:23 +0000 (17:07 +0000)
commit208e5d9eb48fd79c9ac3b3c49a381bcf4d56352d
tree56666538677b67e630d3314473b097a8442db069
parent4764418256006e4a7c068cc3e087f3507f952e9c
drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start

Since commit f4db9358e5c1 ("mm, oom: distinguish blockable mode for mmu
notifiers") we have been able to report failure from
mmu_invalidate_range_start which allows us to use a trylock on the
struct_mutex to avoid potential recursion and report -EBUSY instead.
Furthermore, this allows us to pull the work into the main callback and
avoid the sleight-of-hand in using a workqueue to avoid lockdep.

However, not all paths to mmu_invalidate_range_start are prepared to
handle failure, so instead of reporting the recursion, deal with it by
propagating the failure upwards, who can decide themselves to handle it
or report it.

v2: Mark up the recursive lock behaviour and comment on the various weak
points.

v3: Follow commit 2fb221d212e7 ("drm/i915: Use mutex_lock_killable() from
inside the shrinker") and also use mutex_lock_killable().
v3.1: No leak on EINTR.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108375
References: f4db9358e5c1 ("mm, oom: distinguish blockable mode for mmu notifiers")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190115124442.3500-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_object.h
drivers/gpu/drm/i915/i915_gem_userptr.c