diff options
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
| -rw-r--r-- | drivers/gpu/drm/drm_fops.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 6263b014759..7348a3dab25 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c @@ -133,6 +133,9 @@ int drm_open(struct inode *inode, struct file *filp)  	if (!(dev = minor->dev))  		return -ENODEV; +	if (drm_device_is_unplugged(dev)) +		return -ENODEV; +  	retcode = drm_open_helper(inode, filp, dev);  	if (!retcode) {  		atomic_inc(&dev->counts[_DRM_STAT_OPENS]); @@ -181,6 +184,9 @@ int drm_stub_open(struct inode *inode, struct file *filp)  	if (!(dev = minor->dev))  		goto out; +	if (drm_device_is_unplugged(dev)) +		goto out; +  	old_fops = filp->f_op;  	filp->f_op = fops_get(dev->driver->fops);  	if (filp->f_op == NULL) { @@ -579,6 +585,8 @@ int drm_release(struct inode *inode, struct file *filp)  			retcode = -EBUSY;  		} else  			retcode = drm_lastclose(dev); +		if (drm_device_is_unplugged(dev)) +			drm_put_dev(dev);  	}  	mutex_unlock(&drm_global_mutex);  |