[PATCH 1/3] drm/amdgpu: move VM eviction decision into amdgpu_vm.c
Felix Kuehling
felix.kuehling at amd.com
Thu Dec 5 01:31:44 UTC 2019
On 2019-12-04 10:38 a.m., Christian König wrote:
> 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 at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 5 +----
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 22 ++++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 1 +
> 3 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 19ffe00d9072..81f6764f1ba6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1489,11 +1489,8 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
> struct dma_fence *f;
> 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 &&
> - !dma_resv_test_signaled_rcu(bo->base.resv, true))
> + !amdgpu_vm_evictable(ttm_to_amdgpu_bo(bo)))
> return false;
>
> /* If bo is a KFD BO, check if the bo belongs to the current process.
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index a94c4faa5af1..a22bd57129d1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -2503,6 +2503,28 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
> 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
> *
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 76fcf853035c..db561765453b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -381,6 +381,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
> int amdgpu_vm_bo_update(struct amdgpu_device *adev,
> struct amdgpu_bo_va *bo_va,
> bool clear);
> +bool amdgpu_vm_evictable(struct amdgpu_bo *bo);
> void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
> struct amdgpu_bo *bo, bool evicted);
> uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr);
More information about the amd-gfx
mailing list