diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index a042ef471fbd..a73206784cba 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -649,15 +649,19 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  			return -ENOMEM;  		alloc_size = info->read_mmr_reg.count * sizeof(*regs); -		for (i = 0; i < info->read_mmr_reg.count; i++) +		amdgpu_gfx_off_ctrl(adev, false); +		for (i = 0; i < info->read_mmr_reg.count; i++) {  			if (amdgpu_asic_read_register(adev, se_num, sh_num,  						      info->read_mmr_reg.dword_offset + i,  						      ®s[i])) {  				DRM_DEBUG_KMS("unallowed offset %#x\n",  					      info->read_mmr_reg.dword_offset + i);  				kfree(regs); +				amdgpu_gfx_off_ctrl(adev, true);  				return -EFAULT;  			} +		} +		amdgpu_gfx_off_ctrl(adev, true);  		n = copy_to_user(out, regs, min(size, alloc_size));  		kfree(regs);  		return n ? -EFAULT : 0;  | 
