drm/amdkfd: bail out early if no get_atc_vmid_pasid_mapping_info
authorYifan Zhang <yifan1.zhang@amd.com>
Wed, 9 Mar 2022 01:59:19 +0000 (09:59 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 9 Mar 2022 22:27:50 +0000 (17:27 -0500)
it makes no sense to continue with an undefined vmid.

Fixes: c8b0507f40deea ("drm/amdkfd: judge get_atc_vmid_pasid_mapping_info before call")
Signed-off-by: Yifan Zhang <yifan1.zhang@amd.com>
Reported-by: Nathan Chancellor <nathan@kernel.org>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c

index 77364af..acf4f79 100644 (file)
@@ -500,21 +500,24 @@ static int dbgdev_wave_reset_wavefronts(struct kfd_dev *dev, struct kfd_process
 
        pr_debug("Killing all process wavefronts\n");
 
+       if (!dev->kfd2kgd->get_atc_vmid_pasid_mapping_info) {
+               pr_err("no vmid pasid mapping supported \n");
+               return -EOPNOTSUPP;
+       }
+
        /* Scan all registers in the range ATC_VMID8_PASID_MAPPING ..
         * ATC_VMID15_PASID_MAPPING
         * to check which VMID the current process is mapped to.
         */
 
-       if (dev->kfd2kgd->get_atc_vmid_pasid_mapping_info) {
-               for (vmid = first_vmid_to_scan; vmid <= last_vmid_to_scan; vmid++) {
-                       status = dev->kfd2kgd->get_atc_vmid_pasid_mapping_info
-                                       (dev->adev, vmid, &queried_pasid);
+       for (vmid = first_vmid_to_scan; vmid <= last_vmid_to_scan; vmid++) {
+               status = dev->kfd2kgd->get_atc_vmid_pasid_mapping_info
+                               (dev->adev, vmid, &queried_pasid);
 
-                       if (status && queried_pasid == p->pasid) {
-                               pr_debug("Killing wave fronts of vmid %d and pasid 0x%x\n",
-                                               vmid, p->pasid);
-                               break;
-                       }
+               if (status && queried_pasid == p->pasid) {
+                       pr_debug("Killing wave fronts of vmid %d and pasid 0x%x\n",
+                                       vmid, p->pasid);
+                       break;
                }
        }