[PATCH] drm/amdgpu: fix check in gmc_v9_0_get_vm_pte()
Alex Deucher
alexdeucher at gmail.com
Mon Nov 4 14:48:37 UTC 2024
On Thu, Oct 31, 2024 at 5:49 AM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> The coherency flags can only be determined when the BO is locked and that
> in turn is only guaranteed when the mapping is validated.
>
> Fix the check, move the resource check into the function and add an assert
> that the BO is locked.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Fixes: d1a372af1c3d ("drm/amdgpu: Set MTYPE in PTE based on BO flags")
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index f43ded8a0aab..50c5da3020cb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -1130,8 +1130,10 @@ static void gmc_v9_0_get_coherence_flags(struct amdgpu_device *adev,
> uint64_t *flags)
> {
> struct amdgpu_device *bo_adev = amdgpu_ttm_adev(bo->tbo.bdev);
> - bool is_vram = bo->tbo.resource->mem_type == TTM_PL_VRAM;
> - bool coherent = bo->flags & (AMDGPU_GEM_CREATE_COHERENT | AMDGPU_GEM_CREATE_EXT_COHERENT);
> + bool is_vram = bo->tbo.resource &&
> + bo->tbo.resource->mem_type == TTM_PL_VRAM;
> + bool coherent = bo->flags & (AMDGPU_GEM_CREATE_COHERENT |
> + AMDGPU_GEM_CREATE_EXT_COHERENT);
> bool ext_coherent = bo->flags & AMDGPU_GEM_CREATE_EXT_COHERENT;
> bool uncached = bo->flags & AMDGPU_GEM_CREATE_UNCACHED;
> struct amdgpu_vm *vm = mapping->bo_va->base.vm;
> @@ -1139,6 +1141,8 @@ static void gmc_v9_0_get_coherence_flags(struct amdgpu_device *adev,
> bool snoop = false;
> bool is_local;
>
> + dma_resv_assert_held(bo->tbo.base.resv);
> +
> switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
> case IP_VERSION(9, 4, 1):
> case IP_VERSION(9, 4, 2):
> @@ -1257,9 +1261,8 @@ static void gmc_v9_0_get_vm_pte(struct amdgpu_device *adev,
> *flags &= ~AMDGPU_PTE_VALID;
> }
>
> - if (bo && bo->tbo.resource)
> - gmc_v9_0_get_coherence_flags(adev, mapping->bo_va->base.bo,
> - mapping, flags);
> + if ((*flags & AMDGPU_PTE_VALID) && bo)
> + gmc_v9_0_get_coherence_flags(adev, bo, mapping, flags);
> }
>
> static void gmc_v9_0_override_vm_pte_flags(struct amdgpu_device *adev,
> --
> 2.34.1
>
More information about the amd-gfx
mailing list