aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 82e8d43b235a..f759836d10ef 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -270,7 +270,6 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,
270static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) 270static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
271{ 271{
272 struct amdgpu_device *adev = dev->dev_private; 272 struct amdgpu_device *adev = dev->dev_private;
273 struct amdgpu_fpriv *fpriv = filp->driver_priv;
274 struct drm_amdgpu_info *info = data; 273 struct drm_amdgpu_info *info = data;
275 struct amdgpu_mode_info *minfo = &adev->mode_info; 274 struct amdgpu_mode_info *minfo = &adev->mode_info;
276 void __user *out = (void __user *)(uintptr_t)info->return_pointer; 275 void __user *out = (void __user *)(uintptr_t)info->return_pointer;
@@ -283,8 +282,6 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
283 282
284 if (!info->return_size || !info->return_pointer) 283 if (!info->return_size || !info->return_pointer)
285 return -EINVAL; 284 return -EINVAL;
286 if (amdgpu_kms_vram_lost(adev, fpriv))
287 return -ENODEV;
288 285
289 switch (info->query) { 286 switch (info->query) {
290 case AMDGPU_INFO_ACCEL_WORKING: 287 case AMDGPU_INFO_ACCEL_WORKING:
@@ -792,10 +789,19 @@ void amdgpu_driver_lastclose_kms(struct drm_device *dev)
792 vga_switcheroo_process_delayed_switch(); 789 vga_switcheroo_process_delayed_switch();
793} 790}
794 791
792/**
793 * amdgpu_kms_vram_lost - check if VRAM was lost for this client
794 *
795 * @adev: amdgpu device
796 * @fpriv: client private
797 *
798 * Check if all CS is blocked for the client because of lost VRAM
799 */
795bool amdgpu_kms_vram_lost(struct amdgpu_device *adev, 800bool amdgpu_kms_vram_lost(struct amdgpu_device *adev,
796 struct amdgpu_fpriv *fpriv) 801 struct amdgpu_fpriv *fpriv)
797{ 802{
798 return fpriv->vram_lost_counter != atomic_read(&adev->vram_lost_counter); 803 return fpriv->vram_lost_counter !=
804 atomic_read(&adev->vram_lost_counter);
799} 805}
800 806
801/** 807/**