Commit 04893397 authored by Victor Skvortsov's avatar Victor Skvortsov Committed by Alex Deucher
Browse files

drm/amdgpu: Skip err_count sysfs creation on VF unsupported RAS blocks



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: default avatarVictor Skvortsov <victor.skvortsov@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 16b85a09
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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),
+16 −1
Original line number Diff line number Diff line
@@ -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;
}
+2 −0
Original line number Diff line number Diff line
@@ -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