On 9/30/26 16:43, 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, called once > from amdgpu_vmid_mgr_init() to set vm_manager.vmid_uq_mask_gfxhub/mmhub. > MES and KFD now just read those fields instead of each computing them. > > Signed-off-by: Sunil Khatri <[email protected]>
Reviewed-by: Christian König <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 4 +--- > drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 18 ++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 7 ------- > 3 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > index afcfb92fb9f5f..c59a8f99ecdf6 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 = > adev->vm_manager.vmid_uq_mask_gfxhub, > .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 f8bda01f3bca2..c4c1b2d1e3cd6 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c > @@ -646,6 +646,22 @@ void amdgpu_vmid_mgr_set_vmid_mask(struct amdgpu_device > *adev, > } > } > > +/** > + * amdgpu_vmid_uq_mask_init - init the user queue VMID masks > + * > + * @adev: amdgpu_device pointer > + * > + * Sets vmid_uq_mask_gfxhub/mmhub to the pool of VMIDs at or above > + * first_kfd_vmid, shared by KFD and MES user queues. > + */ > +static void amdgpu_vmid_uq_mask_init(struct amdgpu_device *adev) > +{ > + adev->vm_manager.vmid_uq_mask_gfxhub = > + ((1U << AMDGPU_NUM_VMID) - 1) & > + ~((1U << adev->vm_manager.first_kfd_vmid) - 1); > + adev->vm_manager.vmid_uq_mask_mmhub = 0xFF00; > +} > + > /** > * amdgpu_vmid_mgr_init - init the VMID manager > * > @@ -657,6 +673,8 @@ void amdgpu_vmid_mgr_init(struct amdgpu_device *adev) > { > unsigned i, j; > > + amdgpu_vmid_uq_mask_init(adev); > + > for (i = 0; i < AMDGPU_MAX_VMHUBS; ++i) { > struct amdgpu_vmid_mgr *id_mgr = > &adev->vm_manager.id_mgr[i]; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c > index d1e956cf8e5b8..8d813c68450bf 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,12 +133,6 @@ 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; > - > num_pipes = adev->gfx.me.num_pipe_per_me * adev->gfx.me.num_me; > if (num_pipes > AMDGPU_MES_MAX_GFX_PIPES) > dev_warn(adev->dev, "more gfx pipes than supported by MES! (%d > vs %d)\n",
