On 7/11/26 13:49, Timur Kristóf wrote:
> Allow using multiple SDMA schedulers only on GPUs where
> we are allowed to do concurrent VM flushes.
> This consideration is necessary because all GART windows
> are mapped in VMID 0 (the kernel VMID) so each buffer
> entity would flush VMID 0 concurrently.
> 
> Practically this means that we can't use multiple SDMA
> engines for TTM on GFX6-8 and Navi 1x.
> 
> Fixes: 01c836788b37 ("drm/amdgpu: pass all the sdma scheds to amdgpu_mman")
> Fixes: e4029f7a9474 ("drm/amdgpu: only use working sdma schedulers for ttm")
> Cc: Pierre-Eric Pelloux-Prayer <[email protected]>
> Signed-off-by: Timur Kristóf <[email protected]>

I'm not sure if that is actually fixing anything, but better safe than sorry.

Reviewed-by: Christian König <[email protected]>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 74ada995bd8e..9eb55df6e692 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -2685,12 +2685,22 @@ void amdgpu_sdma_set_buffer_funcs_scheds(struct 
> amdgpu_device *adev,
>               return;
>       }
>  
> -     /* Navi1x's workaround requires us to limit to a single SDMA sched
> -      * for ttm.
> -      */
>       hub = &adev->vmhub[AMDGPU_GFXHUB(0)];
> -     adev->mman.num_buffer_funcs_scheds = hub->sdma_invalidation_workaround ?
> -             1 : n;
> +
> +     /*
> +      * Allow using multiple SDMA schedulers only on GPUs where
> +      * we are allowed to do concurrent VM flushes.
> +      * This consideration is necessary because all GART windows
> +      * are mapped in VMID 0 (the kernel VMID) so each buffer
> +      * entity would flush VMID 0 concurrently.
> +      *
> +      * Also consider the SDMA invalidation workaround on
> +      * Navi 1x GPUs, which also prevents us from using
> +      * multiple SDMA engines on VMID 0 at the same time.
> +      */
> +     adev->mman.num_buffer_funcs_scheds =
> +             (adev->vm_manager.concurrent_flush &&
> +              !hub->sdma_invalidation_workaround) ? n : 1;
>  }
>  
>  #if defined(CONFIG_DEBUG_FS)

Reply via email to