[PATCH 29/35] drm/amdgpu: svm bo enable_signal call condition

Christian König ckoenig.leichtzumerken at gmail.com
Thu Jan 7 10:56:10 UTC 2021


Am 07.01.21 um 04:01 schrieb Felix Kuehling:
> From: Alex Sierra <alex.sierra at amd.com>
>
> [why]
> To support svm bo eviction mechanism.
>
> [how]
> If the BO crated has AMDGPU_AMDKFD_CREATE_SVM_BO flag set,
> enable_signal callback will be called inside amdgpu_evict_flags.
> This also causes gutting of the BO by removing all placements,
> so that TTM won't actually do an eviction. Instead it will discard
> the memory held by the BO. This is needed for HMM migration to user
> mode system memory pages.

I don't think that this will work. What exactly are you doing here?

As Daniel pointed out HMM and dma_fences are fundamentally incompatible.

Christian.

>
> Signed-off-by: Alex Sierra <alex.sierra at amd.com>
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index f423f42cb9b5..62d4da95d22d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -107,6 +107,20 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>   	}
>   
>   	abo = ttm_to_amdgpu_bo(bo);
> +	if (abo->flags & AMDGPU_AMDKFD_CREATE_SVM_BO) {
> +		struct dma_fence *fence;
> +		struct dma_resv *resv = &bo->base._resv;
> +
> +		rcu_read_lock();
> +		fence = rcu_dereference(resv->fence_excl);
> +		if (fence && !fence->ops->signaled)
> +			dma_fence_enable_sw_signaling(fence);
> +
> +		placement->num_placement = 0;
> +		placement->num_busy_placement = 0;
> +		rcu_read_unlock();
> +		return;
> +	}
>   	switch (bo->mem.mem_type) {
>   	case AMDGPU_PL_GDS:
>   	case AMDGPU_PL_GWS:



More information about the dri-devel mailing list