diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 25 | 
1 files changed, 12 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index e16229000a98..720139e182a3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -28,6 +28,7 @@  #include <drm/drmP.h>  #include "amdgpu.h"  #include <drm/amdgpu_drm.h> +#include "amdgpu_sched.h"  #include "amdgpu_uvd.h"  #include "amdgpu_vce.h" @@ -269,7 +270,6 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,  static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)  {  	struct amdgpu_device *adev = dev->dev_private; -	struct amdgpu_fpriv *fpriv = filp->driver_priv;  	struct drm_amdgpu_info *info = data;  	struct amdgpu_mode_info *minfo = &adev->mode_info;  	void __user *out = (void __user *)(uintptr_t)info->return_pointer; @@ -282,8 +282,6 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  	if (!info->return_size || !info->return_pointer)  		return -EINVAL; -	if (amdgpu_kms_vram_lost(adev, fpriv)) -		return -ENODEV;  	switch (info->query) {  	case AMDGPU_INFO_ACCEL_WORKING: @@ -765,6 +763,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  		}  		return copy_to_user(out, &ui32, min(size, 4u)) ? -EFAULT : 0;  	} +	case AMDGPU_INFO_VRAM_LOST_COUNTER: +		ui32 = atomic_read(&adev->vram_lost_counter); +		return copy_to_user(out, &ui32, min(size, 4u)) ? -EFAULT : 0;  	default:  		DRM_DEBUG_KMS("Invalid request %d\n", info->query);  		return -EINVAL; @@ -791,12 +792,6 @@ void amdgpu_driver_lastclose_kms(struct drm_device *dev)  	vga_switcheroo_process_delayed_switch();  } -bool amdgpu_kms_vram_lost(struct amdgpu_device *adev, -			  struct amdgpu_fpriv *fpriv) -{ -	return fpriv->vram_lost_counter != atomic_read(&adev->vram_lost_counter); -} -  /**   * amdgpu_driver_open_kms - drm callback for open   * @@ -825,7 +820,7 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)  	}  	r = amdgpu_vm_init(adev, &fpriv->vm, -			   AMDGPU_VM_CONTEXT_GFX); +			   AMDGPU_VM_CONTEXT_GFX, 0);  	if (r) {  		kfree(fpriv);  		goto out_suspend; @@ -841,8 +836,11 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)  	if (amdgpu_sriov_vf(adev)) {  		r = amdgpu_map_static_csa(adev, &fpriv->vm, &fpriv->csa_va); -		if (r) +		if (r) { +			amdgpu_vm_fini(adev, &fpriv->vm); +			kfree(fpriv);  			goto out_suspend; +		}  	}  	mutex_init(&fpriv->bo_list_lock); @@ -850,7 +848,6 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv)  	amdgpu_ctx_mgr_init(&fpriv->ctx_mgr); -	fpriv->vram_lost_counter = atomic_read(&adev->vram_lost_counter);  	file_priv->driver_priv = fpriv;  out_suspend: @@ -1020,7 +1017,9 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = {  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_CREATE, amdgpu_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	DRM_IOCTL_DEF_DRV(AMDGPU_CTX, amdgpu_ctx_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	DRM_IOCTL_DEF_DRV(AMDGPU_VM, amdgpu_vm_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), +	DRM_IOCTL_DEF_DRV(AMDGPU_SCHED, amdgpu_sched_ioctl, DRM_MASTER),  	DRM_IOCTL_DEF_DRV(AMDGPU_BO_LIST, amdgpu_bo_list_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), +	DRM_IOCTL_DEF_DRV(AMDGPU_FENCE_TO_HANDLE, amdgpu_cs_fence_to_handle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	/* KMS */  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_MMAP, amdgpu_gem_mmap_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_WAIT_IDLE, amdgpu_gem_wait_idle_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), @@ -1031,7 +1030,7 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = {  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_METADATA, amdgpu_gem_metadata_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_VA, amdgpu_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),  	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_OP, amdgpu_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), -	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), +	DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW)  };  const int amdgpu_max_kms_ioctl = ARRAY_SIZE(amdgpu_ioctls_kms); |