diff options
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
| -rw-r--r-- | drivers/gpu/drm/drm_fops.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 2ca8df8b6102..3a652a65546f 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
| @@ -135,15 +135,9 @@ int drm_open(struct inode *inode, struct file *filp) | |||
| 135 | retcode = drm_open_helper(inode, filp, dev); | 135 | retcode = drm_open_helper(inode, filp, dev); |
| 136 | if (!retcode) { | 136 | if (!retcode) { |
| 137 | atomic_inc(&dev->counts[_DRM_STAT_OPENS]); | 137 | atomic_inc(&dev->counts[_DRM_STAT_OPENS]); |
| 138 | spin_lock(&dev->count_lock); | 138 | if (!dev->open_count++) |
| 139 | if (!dev->open_count++) { | ||
| 140 | spin_unlock(&dev->count_lock); | ||
| 141 | retcode = drm_setup(dev); | 139 | retcode = drm_setup(dev); |
| 142 | goto out; | ||
| 143 | } | ||
| 144 | spin_unlock(&dev->count_lock); | ||
| 145 | } | 140 | } |
| 146 | out: | ||
| 147 | if (!retcode) { | 141 | if (!retcode) { |
| 148 | mutex_lock(&dev->struct_mutex); | 142 | mutex_lock(&dev->struct_mutex); |
| 149 | if (minor->type == DRM_MINOR_LEGACY) { | 143 | if (minor->type == DRM_MINOR_LEGACY) { |
| @@ -570,18 +564,14 @@ int drm_release(struct inode *inode, struct file *filp) | |||
| 570 | */ | 564 | */ |
| 571 | 565 | ||
| 572 | atomic_inc(&dev->counts[_DRM_STAT_CLOSES]); | 566 | atomic_inc(&dev->counts[_DRM_STAT_CLOSES]); |
| 573 | spin_lock(&dev->count_lock); | ||
| 574 | if (!--dev->open_count) { | 567 | if (!--dev->open_count) { |
| 575 | if (atomic_read(&dev->ioctl_count)) { | 568 | if (atomic_read(&dev->ioctl_count)) { |
| 576 | DRM_ERROR("Device busy: %d\n", | 569 | DRM_ERROR("Device busy: %d\n", |
| 577 | atomic_read(&dev->ioctl_count)); | 570 | atomic_read(&dev->ioctl_count)); |
| 578 | retcode = -EBUSY; | 571 | retcode = -EBUSY; |
| 579 | goto out; | 572 | } else |
| 580 | } | 573 | retcode = drm_lastclose(dev); |
| 581 | retcode = drm_lastclose(dev); | ||
| 582 | } | 574 | } |
| 583 | out: | ||
| 584 | spin_unlock(&dev->count_lock); | ||
| 585 | mutex_unlock(&drm_global_mutex); | 575 | mutex_unlock(&drm_global_mutex); |
| 586 | 576 | ||
| 587 | return retcode; | 577 | return retcode; |
