drm: Link directly from drm_master to drm_device
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 14 Jun 2016 18:50:58 +0000 (20:50 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 16 Jun 2016 08:16:58 +0000 (10:16 +0200)
Master-based auth only exists for the legacy/primary drm_minor, hence
there can only be one per device. The goal here is to untangle the
epic dereference games of minor->master and master->minor which is
just massively confusing.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1465930269-7883-4-git-send-email-daniel.vetter@ffwll.ch
drivers/gpu/drm/drm_drv.c
drivers/gpu/drm/drm_fops.c
drivers/gpu/drm/drm_internal.h
include/drm/drmP.h

index 8b2582aeaab6284a14385ecb48b7ba7123a148fc..3c01a16bbb775640bb8e840f9502c8403cb68d5e 100644 (file)
@@ -93,7 +93,7 @@ void drm_ut_debug_printk(const char *function_name, const char *format, ...)
 }
 EXPORT_SYMBOL(drm_ut_debug_printk);
 
-struct drm_master *drm_master_create(struct drm_minor *minor)
+struct drm_master *drm_master_create(struct drm_device *dev)
 {
        struct drm_master *master;
 
@@ -105,7 +105,7 @@ struct drm_master *drm_master_create(struct drm_minor *minor)
        spin_lock_init(&master->lock.spinlock);
        init_waitqueue_head(&master->lock.lock_queue);
        idr_init(&master->magic_map);
-       master->minor = minor;
+       master->dev = dev;
 
        return master;
 }
@@ -120,7 +120,7 @@ EXPORT_SYMBOL(drm_master_get);
 static void drm_master_destroy(struct kref *kref)
 {
        struct drm_master *master = container_of(kref, struct drm_master, refcount);
-       struct drm_device *dev = master->minor->dev;
+       struct drm_device *dev = master->dev;
 
        if (dev->driver->master_destroy)
                dev->driver->master_destroy(dev, master);
index 2fd4f42b907a87d3d1e836e15392a1253a932994..bfbf1381f55d0dca24789f0801b01c23eb377798 100644 (file)
@@ -185,7 +185,7 @@ int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv)
        lockdep_assert_held_once(&dev->master_mutex);
 
        /* create a new master */
-       fpriv->minor->master = drm_master_create(fpriv->minor);
+       fpriv->minor->master = drm_master_create(fpriv->minor->dev);
        if (!fpriv->minor->master)
                return -ENOMEM;
 
index 56a9b1cf99d7b7477286d530bfc0248b3c71ebc6..f5c1d17fa51f5b5a81a0151856de2bef1f19837b 100644 (file)
@@ -92,7 +92,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
                        struct drm_file *file_priv);
 int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
                         struct drm_file *file_priv);
-struct drm_master *drm_master_create(struct drm_minor *minor);
+struct drm_master *drm_master_create(struct drm_device *dev);
 
 /* drm_debugfs.c */
 #if defined(CONFIG_DEBUG_FS)
index 04310cb081112678745dfa46a1a97b003fbce202..6067fefc1ec9aaf43686e251e66f8896e62dd954 100644 (file)
@@ -379,16 +379,19 @@ struct drm_lock_data {
  * struct drm_master - drm master structure
  *
  * @refcount: Refcount for this master object.
- * @minor: Link back to minor char device we are master for. Immutable.
+ * @dev: Link back to the DRM device
  * @unique: Unique identifier: e.g. busid. Protected by drm_global_mutex.
  * @unique_len: Length of unique field. Protected by drm_global_mutex.
  * @magic_map: Map of used authentication tokens. Protected by struct_mutex.
  * @lock: DRI lock information.
  * @driver_priv: Pointer to driver-private information.
+ *
+ * Note that master structures are only relevant for the legacy/primary device
+ * nodes, hence there can only be one per device, not one per drm_minor.
  */
 struct drm_master {
        struct kref refcount;
-       struct drm_minor *minor;
+       struct drm_device *dev;
        char *unique;
        int unique_len;
        struct idr magic_map;