drm/amdgpu: properly handle GC vs MM in amdgpu_vmid_mgr_init()
authorAlex Deucher <alexander.deucher@amd.com>
Tue, 29 Apr 2025 17:46:12 +0000 (13:46 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 30 Apr 2025 22:16:53 +0000 (18:16 -0400)
When kernel queues are disabled, all GC vmids are available
for the scheduler.  MM vmids are still managed by the driver
so make all 16 available.

Also fix gmc 10 vs 11 mix up in
commit 1f61fc28b939 ("drm/amdgpu/mes: make more vmids available when disable_kq=1")

v2: Properly handle pre-GC 10 hardware

Fixes: 1f61fc28b939 ("drm/amdgpu/mes: make more vmids available when disable_kq=1")
Cc: Arvind Yadav <Arvind.Yadav@amd.com>
Reviewed-by: Arvind Yadav <Arvind.Yadav@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c

index 359c19de9a5b998e306f8197f140b764567e1c7d..5dd78a9cb12ddf1d2a87c86f6f66f6450d812561 100644 (file)
@@ -576,8 +576,16 @@ void amdgpu_vmid_mgr_init(struct amdgpu_device *adev)
                INIT_LIST_HEAD(&id_mgr->ids_lru);
                id_mgr->reserved_use_count = 0;
 
-               /* manage only VMIDs not used by KFD */
-               id_mgr->num_ids = adev->vm_manager.first_kfd_vmid;
+               /* for GC <10, SDMA uses MMHUB so use first_kfd_vmid for both GC and MM */
+               if (amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(10, 0, 0))
+                       /* manage only VMIDs not used by KFD */
+                       id_mgr->num_ids = adev->vm_manager.first_kfd_vmid;
+               else if (AMDGPU_IS_MMHUB0(i) ||
+                        AMDGPU_IS_MMHUB1(i))
+                       id_mgr->num_ids = 16;
+               else
+                       /* manage only VMIDs not used by KFD */
+                       id_mgr->num_ids = adev->vm_manager.first_kfd_vmid;
 
                /* skip over VMID 0, since it is the system VM */
                for (j = 1; j < id_mgr->num_ids; ++j) {
index 7648e977b44bc3567c9b92a6b39d134be7e87d35..a3e2787501f18f49c1a0ef2700cb79a0b008ae5a 100644 (file)
@@ -896,7 +896,7 @@ static int gmc_v10_0_sw_init(struct amdgpu_ip_block *ip_block)
         * amdgpu graphics/compute will use VMIDs 1-7
         * amdkfd will use VMIDs 8-15
         */
-       adev->vm_manager.first_kfd_vmid = adev->gfx.disable_kq ? 1 : 8;
+       adev->vm_manager.first_kfd_vmid = 8;
 
        amdgpu_vm_manager_init(adev);
 
index 7f5ca170f141adf8516aaaeb6706df08ff4feb2e..917d894a1316abf42aae13c9de889d41b4f41ba2 100644 (file)
@@ -828,7 +828,7 @@ static int gmc_v11_0_sw_init(struct amdgpu_ip_block *ip_block)
         * amdgpu graphics/compute will use VMIDs 1-7
         * amdkfd will use VMIDs 8-15
         */
-       adev->vm_manager.first_kfd_vmid = 8;
+       adev->vm_manager.first_kfd_vmid = adev->gfx.disable_kq ? 1 : 8;
 
        amdgpu_vm_manager_init(adev);