On 30-09-2026 07:57 pm, Christian König wrote:
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.

Got it .. so use the same function to hold value in adev->vm_manager.vmid_uq_mask_gfxhub than returning the value ... and then in kfd use adev->vm_manager.vmid_uq_mask_gfxhub directly.

Regards Sunil Khatri


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