Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb99070b authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/radeon: allways add the VM clear duplicate



We need to allways add the VM clear duplicate of the BO_VA,
no matter what the old status was.

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Test-by: default avatar <hadack@gmx.de>
Tested-by: default avatarMichel Dänzer <michel.daenzer@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d57c0edf
Loading
Loading
Loading
Loading
+16 −18
Original line number Diff line number Diff line
@@ -493,11 +493,8 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev,
	}

	if (bo_va->it.start || bo_va->it.last) {
		spin_lock(&vm->status_lock);
		if (list_empty(&bo_va->vm_status)) {
		/* add a clone of the bo_va to clear the old address */
		struct radeon_bo_va *tmp;
			spin_unlock(&vm->status_lock);
		tmp = kzalloc(sizeof(struct radeon_bo_va), GFP_KERNEL);
		if (!tmp) {
			mutex_unlock(&vm->mutex);
@@ -508,14 +505,15 @@ int radeon_vm_bo_set_addr(struct radeon_device *rdev,
		tmp->it.last = bo_va->it.last;
		tmp->vm = vm;
		tmp->bo = radeon_bo_ref(bo_va->bo);
			spin_lock(&vm->status_lock);
			list_add(&tmp->vm_status, &vm->freed);
		}
		spin_unlock(&vm->status_lock);

		interval_tree_remove(&bo_va->it, &vm->va);
		bo_va->it.start = 0;
		bo_va->it.last = 0;

		spin_lock(&vm->status_lock);
		list_del_init(&bo_va->vm_status);
		list_add(&tmp->vm_status, &vm->freed);
		spin_unlock(&vm->status_lock);
	}

	if (soffset || eoffset) {