Merge tag 'v3.14' into drm-intel-next-queued
[deliverable/linux.git] / drivers / gpu / drm / drm_fops.c
index 4ce5318d14bc782812ce1d43486e902194b8f92b..9b02f126fb0d9ac1e76a08f573dac7d7f2212fa7 100644 (file)
@@ -39,7 +39,7 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 
-/* from BKL pushdown: note that nothing else serializes idr_find() */
+/* from BKL pushdown */
 DEFINE_MUTEX(drm_global_mutex);
 EXPORT_SYMBOL(drm_global_mutex);
 
@@ -83,31 +83,17 @@ int drm_open(struct inode *inode, struct file *filp)
        struct drm_minor *minor;
        int retcode;
        int need_setup = 0;
-       struct address_space *old_mapping;
-       struct address_space *old_imapping;
 
        minor = drm_minor_acquire(iminor(inode));
        if (IS_ERR(minor))
                return PTR_ERR(minor);
 
        dev = minor->dev;
-       if (drm_device_is_unplugged(dev)) {
-               retcode = -ENODEV;
-               goto err_release;
-       }
-
        if (!dev->open_count++)
                need_setup = 1;
-       mutex_lock(&dev->struct_mutex);
-       old_imapping = inode->i_mapping;
-       old_mapping = dev->dev_mapping;
-       if (old_mapping == NULL)
-               dev->dev_mapping = &inode->i_data;
-       /* ihold ensures nobody can remove inode with our i_data */
-       ihold(container_of(dev->dev_mapping, struct inode, i_data));
-       inode->i_mapping = dev->dev_mapping;
-       filp->f_mapping = dev->dev_mapping;
-       mutex_unlock(&dev->struct_mutex);
+
+       /* share address_space across all char-devs of a single device */
+       filp->f_mapping = dev->anon_inode->i_mapping;
 
        retcode = drm_open_helper(inode, filp, minor);
        if (retcode)
@@ -120,14 +106,7 @@ int drm_open(struct inode *inode, struct file *filp)
        return 0;
 
 err_undo:
-       mutex_lock(&dev->struct_mutex);
-       filp->f_mapping = old_imapping;
-       inode->i_mapping = old_imapping;
-       iput(container_of(dev->dev_mapping, struct inode, i_data));
-       dev->dev_mapping = old_mapping;
-       mutex_unlock(&dev->struct_mutex);
        dev->open_count--;
-err_release:
        drm_minor_release(minor);
        return retcode;
 }
@@ -157,9 +136,6 @@ int drm_stub_open(struct inode *inode, struct file *filp)
                goto out_unlock;
 
        dev = minor->dev;
-       if (drm_device_is_unplugged(dev))
-               goto out_release;
-
        new_fops = fops_get(dev->driver->fops);
        if (!new_fops)
                goto out_release;
@@ -430,7 +406,6 @@ int drm_lastclose(struct drm_device * dev)
 
        drm_legacy_dma_takedown(dev);
 
-       dev->dev_mapping = NULL;
        mutex_unlock(&dev->struct_mutex);
 
        drm_legacy_dev_reinit(dev);
@@ -546,9 +521,6 @@ int drm_release(struct inode *inode, struct file *filp)
                }
        }
 
-       BUG_ON(dev->dev_mapping == NULL);
-       iput(container_of(dev->dev_mapping, struct inode, i_data));
-
        /* drop the reference held my the file priv */
        if (file_priv->master)
                drm_master_put(&file_priv->master);
This page took 0.038969 seconds and 5 git commands to generate.