diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 31 | 
1 files changed, 18 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c index 62011a521833..fa53a51db69f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c @@ -2777,23 +2777,28 @@ int amdgpu_ras_block_late_init(struct amdgpu_device *adev,  			goto cleanup;  	} -	r = amdgpu_ras_sysfs_create(adev, ras_block); -	if (r) -		goto interrupt; +	if (ras_obj->hw_ops && +	    (ras_obj->hw_ops->query_ras_error_count || +	     ras_obj->hw_ops->query_ras_error_status)) { +		r = amdgpu_ras_sysfs_create(adev, ras_block); +		if (r) +			goto interrupt; -	/* Those are the cached values at init. -	 */ -	query_info = kzalloc(sizeof(struct ras_query_if), GFP_KERNEL); -	if (!query_info) -		return -ENOMEM; -	memcpy(&query_info->head, ras_block, sizeof(struct ras_common_if)); +		/* Those are the cached values at init. +		 */ +		query_info = kzalloc(sizeof(*query_info), GFP_KERNEL); +		if (!query_info) +			return -ENOMEM; +		memcpy(&query_info->head, ras_block, sizeof(struct ras_common_if)); -	if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count, query_info) == 0) { -		atomic_set(&con->ras_ce_count, ce_count); -		atomic_set(&con->ras_ue_count, ue_count); +		if (amdgpu_ras_query_error_count(adev, &ce_count, &ue_count, query_info) == 0) { +			atomic_set(&con->ras_ce_count, ce_count); +			atomic_set(&con->ras_ue_count, ue_count); +		} + +		kfree(query_info);  	} -	kfree(query_info);  	return 0;  interrupt: | 
