]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Skip err_count sysfs creation on VF unsupported RAS blocks
authorVictor Skvortsov <victor.skvortsov@amd.com>
Tue, 21 Jan 2025 03:00:22 +0000 (22:00 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 13 Feb 2025 02:02:59 +0000 (21:02 -0500)
VFs are not able to query error counts for all RAS blocks. Rather than
returning error for queries on these blocks, skip sysfs the creation
all together.

Signed-off-by: Victor Skvortsov <victor.skvortsov@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h

index 90394f89aba6bb0f9237c43cced65d75e3a43cc2..44d13a60588df79741bad3693770ad63ff3b4b8a 100644 (file)
@@ -1864,6 +1864,9 @@ int amdgpu_ras_sysfs_create(struct amdgpu_device *adev,
        if (!obj || obj->attr_inuse)
                return -EINVAL;
 
+       if (amdgpu_sriov_vf(adev) && !amdgpu_virt_ras_telemetry_block_en(adev, head->block))
+               return 0;
+
        get_obj(obj);
 
        snprintf(obj->fs_data.sysfs_name, sizeof(obj->fs_data.sysfs_name),
index 0af469ec6fccdd08b4072ca4158341511a745dc7..2056efaf157d5a656b7af0b7d524b7eac1fc4f60 100644 (file)
@@ -1246,7 +1246,8 @@ amdgpu_ras_block_to_sriov(struct amdgpu_device *adev, enum amdgpu_ras_block bloc
        case AMDGPU_RAS_BLOCK__MPIO:
                return RAS_TELEMETRY_GPU_BLOCK_MPIO;
        default:
-               dev_err(adev->dev, "Unsupported SRIOV RAS telemetry block 0x%x\n", block);
+               DRM_WARN_ONCE("Unsupported SRIOV RAS telemetry block 0x%x\n",
+                             block);
                return RAS_TELEMETRY_GPU_BLOCK_COUNT;
        }
 }
@@ -1331,3 +1332,17 @@ int amdgpu_virt_ras_telemetry_post_reset(struct amdgpu_device *adev)
 
        return 0;
 }
+
+bool amdgpu_virt_ras_telemetry_block_en(struct amdgpu_device *adev,
+                                       enum amdgpu_ras_block block)
+{
+       enum amd_sriov_ras_telemetry_gpu_block sriov_block;
+
+       sriov_block = amdgpu_ras_block_to_sriov(adev, block);
+
+       if (sriov_block >= RAS_TELEMETRY_GPU_BLOCK_COUNT ||
+           !amdgpu_sriov_ras_telemetry_block_en(adev, sriov_block))
+               return false;
+
+       return true;
+}
index 5381b8d596e6220e6e4e7e667946af1f4372756c..270a032e2d70997a4c8c53f699d9bde0ea4bca0b 100644 (file)
@@ -406,4 +406,6 @@ bool amdgpu_virt_get_ras_capability(struct amdgpu_device *adev);
 int amdgpu_virt_req_ras_err_count(struct amdgpu_device *adev, enum amdgpu_ras_block block,
                                  struct ras_err_data *err_data);
 int amdgpu_virt_ras_telemetry_post_reset(struct amdgpu_device *adev);
+bool amdgpu_virt_ras_telemetry_block_en(struct amdgpu_device *adev,
+                                       enum amdgpu_ras_block block);
 #endif