mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
drm/amdgpu: fix VM faults with per VM BOs
There was a small window between unreserve and second reserve where the freshly allocated BO could have been evicted without the VM noticing it. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
6a83a55303
commit
727ffdf2ac
1 changed files with 20 additions and 2 deletions
|
@ -1745,8 +1745,26 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev,
|
|||
INIT_LIST_HEAD(&bo_va->valids);
|
||||
INIT_LIST_HEAD(&bo_va->invalids);
|
||||
|
||||
if (bo)
|
||||
list_add_tail(&bo_va->base.bo_list, &bo->va);
|
||||
if (!bo)
|
||||
return bo_va;
|
||||
|
||||
list_add_tail(&bo_va->base.bo_list, &bo->va);
|
||||
|
||||
if (bo->tbo.resv != vm->root.base.bo->tbo.resv)
|
||||
return bo_va;
|
||||
|
||||
if (bo->preferred_domains &
|
||||
amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type))
|
||||
return bo_va;
|
||||
|
||||
/*
|
||||
* We checked all the prerequisites, but it looks like this per VM BO
|
||||
* is currently evicted. add the BO to the evicted list to make sure it
|
||||
* is validated on next VM use to avoid fault.
|
||||
* */
|
||||
spin_lock(&vm->status_lock);
|
||||
list_move_tail(&bo_va->base.vm_status, &vm->evicted);
|
||||
spin_unlock(&vm->status_lock);
|
||||
|
||||
return bo_va;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue