On 9/30/26 16:18, Sunil Khatri wrote:
> Move the duplicated VMID-mask-above-first_kfd_vmid computation out of
> amdgpu_mes.c and amdgpu_amdkfd.c into a shared helper.
> 
> Signed-off-by: Sunil Khatri <[email protected]>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c |  4 +---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c    | 14 ++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h    |  1 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c    |  6 +-----
>  4 files changed, 17 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index afcfb92fb9f5f..582be4f0a3b76 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -178,9 +178,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
>  
>       if (adev->kfd.dev) {
>               struct kgd2kfd_shared_resources gpu_resources = {
> -                     .compute_vmid_bitmap =
> -                             ((1 << AMDGPU_NUM_VMID) - 1) -
> -                             ((1 << adev->vm_manager.first_kfd_vmid) - 1),
> +                     .compute_vmid_bitmap = amdgpu_vmid_uq_mask(adev),
>                       .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
>                       .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe,
>                       .gpuvm_size = min(adev->vm_manager.max_pfn
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> index 4e37de79f0318..c94a085bf6503 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> @@ -646,6 +646,20 @@ void amdgpu_vmid_mgr_set_vmid_mask(struct amdgpu_device 
> *adev,
>       }
>  }
>  
> +/**
> + * amdgpu_vmid_uq_mask - VMID mask not reserved for kernel queues
> + *
> + * @adev: amdgpu_device pointer
> + *
> + * Returns the mask of VMIDs at or above first_kfd_vmid. Shared by KFD
> + * and MES user queues, which both draw from this same pool.
> + */
> +u32 amdgpu_vmid_uq_mask(struct amdgpu_device *adev)

That is a good start, but I was rather assuming that function would initialize 
adev->vm_manager.vmid_uq_mask_*hub.

And then we use those values for both the compute_vmid_bitmap of KFD and MES.

Regards,
Christian.

> +{
> +     return ((1U << AMDGPU_NUM_VMID) - 1) &
> +            ~((1U << adev->vm_manager.first_kfd_vmid) - 1);
> +}
> +
>  /**
>   * amdgpu_vmid_mgr_init - init the VMID manager
>   *
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
> index 21d6a41d1738a..8e450abf2ab0c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
> @@ -120,5 +120,6 @@ void amdgpu_vmid_mgr_init(struct amdgpu_device *adev);
>  void amdgpu_vmid_mgr_fini(struct amdgpu_device *adev);
>  void amdgpu_vmid_mgr_set_vmid_mask(struct amdgpu_device *adev,
>                                  unsigned long vmid_mask, bool for_mmhub);
> +u32 amdgpu_vmid_uq_mask(struct amdgpu_device *adev);
>  
>  #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> index d1e956cf8e5b8..9424d94af465a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> @@ -111,7 +111,6 @@ static void 
> amdgpu_mes_userq_notify_unmap_work_handler(struct work_struct *work)
>  int amdgpu_mes_init(struct amdgpu_device *adev)
>  {
>       int i, r, num_pipes, num_queues = 0;
> -     u32 total_vmid_mask, reserved_vmid_mask;
>       int num_xcc = adev->gfx.xcc_mask ? NUM_XCC(adev->gfx.xcc_mask) : 1;
>       u32 gfx_hqd_mask = amdgpu_mes_get_hqd_mask(adev->gfx.me.num_pipe_per_me,
>                               adev->gfx.me.num_queue_per_pipe,
> @@ -134,11 +133,8 @@ int amdgpu_mes_init(struct amdgpu_device *adev)
>       atomic_set(&adev->mes.userq_hw_queue_count, 0);
>       INIT_DELAYED_WORK(&adev->mes.userq_notify_unmap_work,
>                         amdgpu_mes_userq_notify_unmap_work_handler);
> -     total_vmid_mask = (u32)((1UL << 16) - 1);
> -     reserved_vmid_mask = (u32)((1UL << adev->vm_manager.first_kfd_vmid) - 
> 1);
> -
>       adev->vm_manager.vmid_uq_mask_mmhub = 0xFF00;
> -     adev->vm_manager.vmid_uq_mask_gfxhub = total_vmid_mask & 
> ~reserved_vmid_mask;
> +     adev->vm_manager.vmid_uq_mask_gfxhub = amdgpu_vmid_uq_mask(adev);
>  
>       num_pipes = adev->gfx.me.num_pipe_per_me * adev->gfx.me.num_me;
>       if (num_pipes > AMDGPU_MES_MAX_GFX_PIPES)

Reply via email to