drm/amdgpu: expand sdma copy_buffer interface with tmz parameter
[linux-2.6-microblaze.git] / drivers / gpu / drm / drm_drv.c
index 7c18a98..7b1a628 100644 (file)
@@ -946,7 +946,8 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
        struct drm_driver *driver = dev->driver;
        int ret;
 
-       mutex_lock(&drm_global_mutex);
+       if (drm_dev_needs_global_mutex(dev))
+               mutex_lock(&drm_global_mutex);
 
        ret = drm_minor_register(dev, DRM_MINOR_RENDER);
        if (ret)
@@ -986,7 +987,8 @@ err_minors:
        drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
        drm_minor_unregister(dev, DRM_MINOR_RENDER);
 out_unlock:
-       mutex_unlock(&drm_global_mutex);
+       if (drm_dev_needs_global_mutex(dev))
+               mutex_unlock(&drm_global_mutex);
        return ret;
 }
 EXPORT_SYMBOL(drm_dev_register);
@@ -1079,17 +1081,14 @@ static int drm_stub_open(struct inode *inode, struct file *filp)
 
        DRM_DEBUG("\n");
 
-       mutex_lock(&drm_global_mutex);
        minor = drm_minor_acquire(iminor(inode));
-       if (IS_ERR(minor)) {
-               err = PTR_ERR(minor);
-               goto out_unlock;
-       }
+       if (IS_ERR(minor))
+               return PTR_ERR(minor);
 
        new_fops = fops_get(minor->dev->driver->fops);
        if (!new_fops) {
                err = -ENODEV;
-               goto out_release;
+               goto out;
        }
 
        replace_fops(filp, new_fops);
@@ -1098,10 +1097,9 @@ static int drm_stub_open(struct inode *inode, struct file *filp)
        else
                err = 0;
 
-out_release:
+out:
        drm_minor_release(minor);
-out_unlock:
-       mutex_unlock(&drm_global_mutex);
+
        return err;
 }