drm: Link directly from drm_master to drm_device
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
This commit is contained in:
parent
1a75a222f5
commit
34a839c689
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue