]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915: Drop vm.ref for duplicate vma on construction
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 2 Jul 2020 08:32:03 +0000 (09:32 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 2 Jul 2020 12:48:00 +0000 (13:48 +0100)
As we allow for parallel threads to create the same vma instance
concurrently, and we only filter out the duplicates upon reacquiring the
spinlock for the rbtree, we have to free the loser of the constructors'
race. When freeing, we should also drop any resource references acquired
for the redundant vma.

Fixes: 2850748ef876 ("drm/i915: Pull i915_vma_pin under the vm->mutex")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: <stable@vger.kernel.org> # v5.5+
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200702083225.20044-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_vma.c

index 1f63c4a1f055a323e754cd2718a8aaff7e1b8a5b..7fe1f317cd2bcc889d977692e462caa98334b614 100644 (file)
@@ -198,6 +198,7 @@ vma_create(struct drm_i915_gem_object *obj,
                cmp = i915_vma_compare(pos, vm, view);
                if (cmp == 0) {
                        spin_unlock(&obj->vma.lock);
+                       i915_vm_put(vm);
                        i915_vma_free(vma);
                        return pos;
                }