Merge branch 'master' into modesetting-gem
[platform/upstream/libdrm.git] / linux-core / drm_drv.c
index 4e7c531..aefbd76 100644 (file)
@@ -175,6 +175,12 @@ static struct drm_ioctl_desc drm_ioctls[] = {
        DRM_IOCTL_DEF(DRM_IOCTL_BO_VERSION, drm_bo_version_ioctl, 0),
 
        DRM_IOCTL_DEF(DRM_IOCTL_MM_INFO, drm_mm_info_ioctl, 0),
+
+#if OS_HAS_GEM
+       DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, 0),
+       DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH),
+       DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH),
+#endif
 };
 
 #define DRM_CORE_IOCTL_COUNT   ARRAY_SIZE( drm_ioctls )
@@ -427,9 +433,10 @@ static void drm_cleanup(struct drm_device * dev)
        drm_mm_takedown(&dev->offset_manager);
        drm_ht_remove(&dev->object_hash);
 
-       drm_put_minor(&dev->primary);
+       drm_put_minor(dev, &dev->primary);
        if (drm_core_check_feature(dev, DRIVER_MODESET))
-               drm_put_minor(&dev->control);
+               drm_put_minor(dev, &dev->control);
+
        if (drm_put_dev(dev))
                DRM_ERROR("Cannot unload module\n");
 }
@@ -630,9 +637,10 @@ long drm_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END)
                && (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls))
                ioctl = &dev->driver->ioctls[nr - DRM_COMMAND_BASE];
-       else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE))
+       else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
                ioctl = &drm_ioctls[nr];
-       else {
+               cmd = ioctl->cmd;
+       } else {
                retcode = -EINVAL;
                goto err_i1;
        }
@@ -649,6 +657,7 @@ long drm_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                goto err_i1;
        }
 #endif
+
        func = ioctl->func;
        /* is there a local override? */
        if ((nr == DRM_IOCTL_NR(DRM_IOCTL_DMA)) && dev->driver->dma_ioctl)
@@ -674,7 +683,7 @@ long drm_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                retcode = func(dev, kdata, file_priv);
        }
 
-       if ((retcode == 0) && (cmd & IOC_OUT)) {
+       if (cmd & IOC_OUT) {
                if (copy_to_user((void __user *)arg, kdata,
                                 _IOC_SIZE(cmd)) != 0)
                        retcode = -EFAULT;