mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-11 00:04:33 +08:00
drm/i915/gt: Pull marking vm as closed underneath the vm->mutex
Pull the final atomic_dec of vm->open (marking the vm as closed)
underneath the same vm->mutex as used to close it. This is required to
correctly serialise with attempting to reuse the vma as the vm is closed
by a second thread.
References: 00de702c6c
("drm/i915: Check that the vma hasn't been closed before we insert it")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200227085723.1961649-10-chris@chris-wilson.co.uk
This commit is contained in:
parent
d3b03d8bf4
commit
ad2f9bc9bc
@ -171,7 +171,9 @@ void __i915_vm_close(struct i915_address_space *vm)
|
||||
{
|
||||
struct i915_vma *vma, *vn;
|
||||
|
||||
mutex_lock(&vm->mutex);
|
||||
if (!atomic_dec_and_mutex_lock(&vm->open, &vm->mutex))
|
||||
return;
|
||||
|
||||
list_for_each_entry_safe(vma, vn, &vm->bound_list, vm_link) {
|
||||
struct drm_i915_gem_object *obj = vma->obj;
|
||||
|
||||
@ -186,6 +188,7 @@ void __i915_vm_close(struct i915_address_space *vm)
|
||||
i915_gem_object_put(obj);
|
||||
}
|
||||
GEM_BUG_ON(!list_empty(&vm->bound_list));
|
||||
|
||||
mutex_unlock(&vm->mutex);
|
||||
}
|
||||
|
||||
|
@ -429,8 +429,7 @@ static inline void
|
||||
i915_vm_close(struct i915_address_space *vm)
|
||||
{
|
||||
GEM_BUG_ON(!atomic_read(&vm->open));
|
||||
if (atomic_dec_and_test(&vm->open))
|
||||
__i915_vm_close(vm);
|
||||
__i915_vm_close(vm);
|
||||
|
||||
i915_vm_put(vm);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user