drm/amdgpu: move VM eviction decision into amdgpu_vm.c
When a page tables needs to be evicted the VM code should decide if that is possible or not. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4b4c5638c0
commit
6ceeb144b1
@ -1489,11 +1489,8 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
|
|||||||
struct dma_fence *f;
|
struct dma_fence *f;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Don't evict VM page tables while they are busy, otherwise we can't
|
|
||||||
* cleanly handle page faults.
|
|
||||||
*/
|
|
||||||
if (bo->type == ttm_bo_type_kernel &&
|
if (bo->type == ttm_bo_type_kernel &&
|
||||||
!dma_resv_test_signaled_rcu(bo->base.resv, true))
|
!amdgpu_vm_evictable(ttm_to_amdgpu_bo(bo)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If bo is a KFD BO, check if the bo belongs to the current process.
|
/* If bo is a KFD BO, check if the bo belongs to the current process.
|
||||||
|
@ -2499,6 +2499,28 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
|
|||||||
kfree(bo_va);
|
kfree(bo_va);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* amdgpu_vm_evictable - check if we can evict a VM
|
||||||
|
*
|
||||||
|
* @bo: A page table of the VM.
|
||||||
|
*
|
||||||
|
* Check if it is possible to evict a VM.
|
||||||
|
*/
|
||||||
|
bool amdgpu_vm_evictable(struct amdgpu_bo *bo)
|
||||||
|
{
|
||||||
|
struct amdgpu_vm_bo_base *bo_base = bo->vm_bo;
|
||||||
|
|
||||||
|
/* Page tables of a destroyed VM can go away immediately */
|
||||||
|
if (!bo_base || !bo_base->vm)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* Don't evict VM page tables while they are busy */
|
||||||
|
if (!dma_resv_test_signaled_rcu(bo->tbo.base.resv, true))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* amdgpu_vm_bo_invalidate - mark the bo as invalid
|
* amdgpu_vm_bo_invalidate - mark the bo as invalid
|
||||||
*
|
*
|
||||||
|
@ -378,6 +378,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
|
|||||||
int amdgpu_vm_bo_update(struct amdgpu_device *adev,
|
int amdgpu_vm_bo_update(struct amdgpu_device *adev,
|
||||||
struct amdgpu_bo_va *bo_va,
|
struct amdgpu_bo_va *bo_va,
|
||||||
bool clear);
|
bool clear);
|
||||||
|
bool amdgpu_vm_evictable(struct amdgpu_bo *bo);
|
||||||
void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
|
void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
|
||||||
struct amdgpu_bo *bo, bool evicted);
|
struct amdgpu_bo *bo, bool evicted);
|
||||||
uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr);
|
uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user