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)