On 11/13/25 17:05, Pierre-Eric Pelloux-Prayer wrote:
> All sdma versions used the same logic, so add a helper and move the
> common code to a single place.
> 
> ---
> v2: pass amdgpu_vm_pte_funcs as well
> ---
> 
> Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h      |  2 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c   | 17 +++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/cik_sdma.c    |  9 +--------
>  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c   |  9 +--------
>  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c   |  9 +--------
>  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c   | 13 +------------
>  drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 13 +------------
>  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c   | 12 ++----------
>  drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c   | 12 ++----------
>  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c   |  9 +--------
>  drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c   |  9 +--------
>  drivers/gpu/drm/amd/amdgpu/si_dma.c      |  9 +--------
>  12 files changed, 31 insertions(+), 92 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 50079209c472..3fab3dc9f3e4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1613,6 +1613,8 @@ struct dma_fence 
> *amdgpu_device_enforce_isolation(struct amdgpu_device *adev,
>  bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev);
>  ssize_t amdgpu_get_soft_full_reset_mask(struct amdgpu_ring *ring);
>  ssize_t amdgpu_show_reset_mask(char *buf, uint32_t supported_reset);
> +void amdgpu_sdma_set_vm_pte_scheds(struct amdgpu_device *adev,
> +                                const struct amdgpu_vm_pte_funcs 
> *vm_pte_funcs);
>  
>  /* atpx handler */
>  #if defined(CONFIG_VGA_SWITCHEROO)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index aaa44199e9f4..3d29c3642d1a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -3210,3 +3210,20 @@ void amdgpu_vm_print_task_info(struct amdgpu_device 
> *adev,
>               task_info->process_name, task_info->tgid,
>               task_info->task.comm, task_info->task.pid);
>  }
> +
> +void amdgpu_sdma_set_vm_pte_scheds(struct amdgpu_device *adev,
> +                                const struct amdgpu_vm_pte_funcs 
> *vm_pte_funcs)
> +{
> +     struct drm_gpu_scheduler *sched;
> +     int i;
> +
> +     for (i = 0; i < adev->sdma.num_instances; i++) {
> +             if (adev->sdma.has_page_queue)
> +                     sched = &adev->sdma.instance[i].page.sched;
> +             else
> +                     sched = &adev->sdma.instance[i].ring.sched;
> +             adev->vm_manager.vm_pte_scheds[i] = sched;
> +     }
> +     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     adev->vm_manager.vm_pte_funcs = vm_pte_funcs;
> +}
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c 
> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
> index 9e8715b4739d..5fe162f52c92 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
> @@ -1347,14 +1347,7 @@ static const struct amdgpu_vm_pte_funcs 
> cik_sdma_vm_pte_funcs = {
>  
>  static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &cik_sdma_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                     &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &cik_sdma_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version cik_sdma_ip_block =
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
> index 92ce580647cd..63636643db3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
> @@ -1242,14 +1242,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v2_4_vm_pte_funcs = {
>  
>  static void sdma_v2_4_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {

I think we can also get rid of all those sdma_v*_set_vm_pte_funcs which are 
only a single line calls.

Regards,
Christian.

> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v2_4_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                     &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v2_4_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v2_4_ip_block = {
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> index 1c076bd1cf73..0153626b5df2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> @@ -1684,14 +1684,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v3_0_vm_pte_funcs = {
>  
>  static void sdma_v3_0_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v3_0_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                      &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v3_0_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v3_0_ip_block =
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> index f38004e6064e..96a67b30854c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> @@ -2625,18 +2625,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v4_0_vm_pte_funcs = {
>  
>  static void sdma_v4_0_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     struct drm_gpu_scheduler *sched;
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v4_0_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             if (adev->sdma.has_page_queue)
> -                     sched = &adev->sdma.instance[i].page.sched;
> -             else
> -                     sched = &adev->sdma.instance[i].ring.sched;
> -             adev->vm_manager.vm_pte_scheds[i] = sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v4_0_vm_pte_funcs);
>  }
>  
>  static void sdma_v4_0_get_ras_error_count(uint32_t value,
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> index 36b1ca73c2ed..04dc8a8f4d66 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
> @@ -2326,18 +2326,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v4_4_2_vm_pte_funcs = {
>  
>  static void sdma_v4_4_2_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     struct drm_gpu_scheduler *sched;
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v4_4_2_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             if (adev->sdma.has_page_queue)
> -                     sched = &adev->sdma.instance[i].page.sched;
> -             else
> -                     sched = &adev->sdma.instance[i].ring.sched;
> -             adev->vm_manager.vm_pte_scheds[i] = sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v4_4_2_vm_pte_funcs);
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> index 7dc67a22a7a0..19c717f2c602 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> @@ -2081,16 +2081,8 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v5_0_vm_pte_funcs = {
>  
>  static void sdma_v5_0_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     if (adev->vm_manager.vm_pte_funcs == NULL) {
> -             adev->vm_manager.vm_pte_funcs = &sdma_v5_0_vm_pte_funcs;
> -             for (i = 0; i < adev->sdma.num_instances; i++) {
> -                     adev->vm_manager.vm_pte_scheds[i] =
> -                             &adev->sdma.instance[i].ring.sched;
> -             }
> -             adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> -     }
> +     if (adev->vm_manager.vm_pte_funcs == NULL)
> +             amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v5_0_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v5_0_ip_block = {
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> index 3bd44c24f692..7a07b8f4e86d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> @@ -2091,16 +2091,8 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v5_2_vm_pte_funcs = {
>  
>  static void sdma_v5_2_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     if (adev->vm_manager.vm_pte_funcs == NULL) {
> -             adev->vm_manager.vm_pte_funcs = &sdma_v5_2_vm_pte_funcs;
> -             for (i = 0; i < adev->sdma.num_instances; i++) {
> -                     adev->vm_manager.vm_pte_scheds[i] =
> -                             &adev->sdma.instance[i].ring.sched;
> -             }
> -             adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> -     }
> +     if (adev->vm_manager.vm_pte_funcs == NULL)
> +             amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v5_2_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v5_2_ip_block = {
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> index db6e41967f12..8f8228c7adee 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> @@ -1897,14 +1897,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v6_0_vm_pte_funcs = {
>  
>  static void sdma_v6_0_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v6_0_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                     &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v6_0_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v6_0_ip_block = {
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c 
> b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> index 326ecc8d37d2..cf412d8fb0ed 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> @@ -1839,14 +1839,7 @@ static const struct amdgpu_vm_pte_funcs 
> sdma_v7_0_vm_pte_funcs = {
>  
>  static void sdma_v7_0_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &sdma_v7_0_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                     &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &sdma_v7_0_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version sdma_v7_0_ip_block = {
> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c 
> b/drivers/gpu/drm/amd/amdgpu/si_dma.c
> index 7f18e4875287..863e00086c30 100644
> --- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
> +++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
> @@ -840,14 +840,7 @@ static const struct amdgpu_vm_pte_funcs 
> si_dma_vm_pte_funcs = {
>  
>  static void si_dma_set_vm_pte_funcs(struct amdgpu_device *adev)
>  {
> -     unsigned i;
> -
> -     adev->vm_manager.vm_pte_funcs = &si_dma_vm_pte_funcs;
> -     for (i = 0; i < adev->sdma.num_instances; i++) {
> -             adev->vm_manager.vm_pte_scheds[i] =
> -                     &adev->sdma.instance[i].ring.sched;
> -     }
> -     adev->vm_manager.vm_pte_num_scheds = adev->sdma.num_instances;
> +     amdgpu_sdma_set_vm_pte_scheds(adev, &si_dma_vm_pte_funcs);
>  }
>  
>  const struct amdgpu_ip_block_version si_dma_ip_block =

Reply via email to