summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_fops.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-04-16 15:20:06 +0200
committerTakashi Iwai <tiwai@suse.de>2010-04-16 15:20:06 +0200
commitcf0dbba515415bb19b11f9323d5f7bebd7f24fd6 (patch)
tree375bbc1ade1a92acd6493d224dd701fd7f209014 /drivers/gpu/drm/drm_fops.c
parentALSA: i2c: Fixed 8 checkpatch errors (diff)
parentALSA: Release v1.0.23 (diff)
downloadlinux-cf0dbba515415bb19b11f9323d5f7bebd7f24fd6.tar.xz
linux-cf0dbba515415bb19b11f9323d5f7bebd7f24fd6.zip
Merge remote branch 'alsa/devel' into topic/misc
Diffstat (limited to 'drivers/gpu/drm/drm_fops.c')
-rw-r--r--drivers/gpu/drm/drm_fops.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 08d14df3bb42..9d532d7fdf59 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -36,6 +36,7 @@
#include "drmP.h"
#include <linux/poll.h>
+#include <linux/slab.h>
#include <linux/smp_lock.h>
static int drm_open_helper(struct inode *inode, struct file *filp,
@@ -140,14 +141,16 @@ int drm_open(struct inode *inode, struct file *filp)
spin_unlock(&dev->count_lock);
}
out:
- mutex_lock(&dev->struct_mutex);
- if (minor->type == DRM_MINOR_LEGACY) {
- BUG_ON((dev->dev_mapping != NULL) &&
- (dev->dev_mapping != inode->i_mapping));
- if (dev->dev_mapping == NULL)
- dev->dev_mapping = inode->i_mapping;
+ if (!retcode) {
+ mutex_lock(&dev->struct_mutex);
+ if (minor->type == DRM_MINOR_LEGACY) {
+ if (dev->dev_mapping == NULL)
+ dev->dev_mapping = inode->i_mapping;
+ else if (dev->dev_mapping != inode->i_mapping)
+ retcode = -ENODEV;
+ }
+ mutex_unlock(&dev->struct_mutex);
}
- mutex_unlock(&dev->struct_mutex);
return retcode;
}