]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:28 +0000 (11:13 +0200)
[ Upstream commit 04893397766a2b2f1bc7fe5c6414e4c0846ed171 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
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 f0924aa3f4e485ac60f05f5d71e7d65f5ed162c9..0c338dcdde48ae58a3aac2ff88c09e59e20439d0 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 13e5709ea1caa3a6583d01b5a1aa0c0fbacc27ab..e6f0152e5b08720e4775d82ffd5b694370ee74b2 100644 (file)
@@ -1247,7 +1247,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;
        }
 }
@@ -1332,3 +1333,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 0ca73343a768938819d0080c07c52842f7f8f99a..0f3ccae5c1ab3bc7777f8e0480abbfe23e8f4644 100644 (file)
@@ -407,4 +407,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