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)