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

Commit 444066b9 authored by Chunming Zhou's avatar Chunming Zhou Committed by Alex Deucher
Browse files

drm/amdgpu: fix wrong release of vmid owner



The release of the vmid owner was not handled
correctly.  We need to take the lock and walk
the lru list.

Signed-off-by: default avatarChunming Zhou <David1.Zhou@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarMonk Liu <monk.liu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 2e726dc4
Loading
Loading
Loading
Loading
+9 −5
Original line number Original line Diff line number Diff line
@@ -1454,6 +1454,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
{
{
	struct amdgpu_bo_va_mapping *mapping, *tmp;
	struct amdgpu_bo_va_mapping *mapping, *tmp;
	struct amdgpu_vm_id *id, *id_tmp;
	int i;
	int i;


	amd_sched_entity_fini(vm->entity.sched, &vm->entity);
	amd_sched_entity_fini(vm->entity.sched, &vm->entity);
@@ -1478,14 +1479,17 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
	amdgpu_bo_unref(&vm->page_directory);
	amdgpu_bo_unref(&vm->page_directory);
	fence_put(vm->page_directory_fence);
	fence_put(vm->page_directory_fence);


	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
	mutex_lock(&adev->vm_manager.lock);
		struct amdgpu_vm_id *id = vm->ids[i];
	list_for_each_entry_safe(id, id_tmp, &adev->vm_manager.ids_lru,

				 list) {
		if (!id)
		if (!id)
			continue;
			continue;

		if (atomic_long_read(&id->owner) == (long)vm) {
		atomic_long_cmpxchg(&id->owner, (long)vm, 0);
			atomic_long_set(&id->owner, 0);
			id->pd_gpu_addr = 0;
		}
	}
	}
	mutex_unlock(&adev->vm_manager.lock);
}
}


/**
/**