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)