drm: inline drm_minor_get_id()
authorDavid Herrmann <dh.herrmann@gmail.com>
Mon, 24 Feb 2014 14:35:09 +0000 (15:35 +0100)
committerDavid Herrmann <dh.herrmann@gmail.com>
Sun, 16 Mar 2014 11:25:19 +0000 (12:25 +0100)
We can significantly simplify this helper by using plain multiplication.
Note that we converted the minor-type to an enum earlier so this didn't
work before.

We also fix a minor range-bug here: the limit argument of idr_alloc() is
*exclusive*, not inclusive, so we should use 64 instead of 63 as offset.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
drivers/gpu/drm/drm_stub.c

index 5268ffc5d94e198a388fe6f51e8f54c0d8ba82f0..83ef4a63358cf1227325a06ab90d57f13642a209 100644 (file)
@@ -117,26 +117,6 @@ void drm_ut_debug_printk(unsigned int request_level,
 }
 EXPORT_SYMBOL(drm_ut_debug_printk);
 
-static int drm_minor_get_id(struct drm_device *dev, int type)
-{
-       int ret;
-       int base = 0, limit = 63;
-
-       if (type == DRM_MINOR_CONTROL) {
-               base += 64;
-               limit = base + 63;
-       } else if (type == DRM_MINOR_RENDER) {
-               base += 128;
-               limit = base + 63;
-       }
-
-       mutex_lock(&dev->struct_mutex);
-       ret = idr_alloc(&drm_minors_idr, NULL, base, limit, GFP_KERNEL);
-       mutex_unlock(&dev->struct_mutex);
-
-       return ret == -ENOSPC ? -EINVAL : ret;
-}
-
 struct drm_master *drm_master_create(struct drm_minor *minor)
 {
        struct drm_master *master;
@@ -314,7 +294,12 @@ static int drm_minor_register(struct drm_device *dev, unsigned int type)
        if (!new_minor)
                return 0;
 
-       minor_id = drm_minor_get_id(dev, type);
+       minor_id = idr_alloc(&drm_minors_idr,
+                            NULL,
+                            64 * type,
+                            64 * (type + 1),
+                            GFP_KERNEL);
+
        if (minor_id < 0)
                return minor_id;