drm: drop redundant drm_file->is_master
The drm_file->is_master field is redundant as it's equivalent to:
    drm_file->master && drm_file->master == drm_file->minor->master
1) "=>"
  Whenever we set drm_file->is_master, we also set:
      drm_file->minor->master = drm_file->master;
  Whenever we clear drm_file->is_master, we also call:
      drm_master_put(&drm_file->minor->master);
  which implicitly clears it to NULL.
2) "<="
  minor->master cannot be set if it is non-NULL. Therefore, it stays as
  is unless a file drops it.
  If minor->master is NULL, it is only set by places that also adjust
  drm_file->is_master.
Therefore, we can safely drop is_master and replace it by an inline helper
that matches:
    drm_file->master && drm_file->master == drm_file->minor->master
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									9f8d21ea27
								
							
						
					
					
						commit
						48ba813701
					
				| @ -3243,7 +3243,7 @@ int drm_mode_getfb(struct drm_device *dev, | ||||
| 	r->bpp = fb->bits_per_pixel; | ||||
| 	r->pitch = fb->pitches[0]; | ||||
| 	if (fb->funcs->create_handle) { | ||||
| 		if (file_priv->is_master || capable(CAP_SYS_ADMIN) || | ||||
| 		if (drm_is_master(file_priv) || capable(CAP_SYS_ADMIN) || | ||||
| 		    drm_is_control_client(file_priv)) { | ||||
| 			ret = fb->funcs->create_handle(fb, file_priv, | ||||
| 						       &r->handle); | ||||
|  | ||||
| @ -307,7 +307,7 @@ static int drm_ioctl_permit(u32 flags, struct drm_file *file_priv) | ||||
| 		return -EACCES; | ||||
| 
 | ||||
| 	/* MASTER is only for master or control clients */ | ||||
| 	if (unlikely((flags & DRM_MASTER) && !file_priv->is_master && | ||||
| 	if (unlikely((flags & DRM_MASTER) && !drm_is_master(file_priv) && | ||||
| 		     !drm_is_control_client(file_priv))) | ||||
| 		return -EACCES; | ||||
| 
 | ||||
|  | ||||
| @ -233,7 +233,6 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor) | ||||
| 			goto out_close; | ||||
| 		} | ||||
| 
 | ||||
| 		priv->is_master = 1; | ||||
| 		/* take another reference for the copy in the local file priv */ | ||||
| 		priv->master = drm_master_get(priv->minor->master); | ||||
| 		priv->authenticated = 1; | ||||
| @ -461,7 +460,7 @@ int drm_release(struct inode *inode, struct file *filp) | ||||
| 
 | ||||
| 	mutex_lock(&dev->master_mutex); | ||||
| 
 | ||||
| 	if (file_priv->is_master) { | ||||
| 	if (drm_is_master(file_priv)) { | ||||
| 		struct drm_master *master = file_priv->master; | ||||
| 		struct drm_file *temp; | ||||
| 
 | ||||
| @ -497,7 +496,6 @@ int drm_release(struct inode *inode, struct file *filp) | ||||
| 	/* drop the master reference held by the file priv */ | ||||
| 	if (file_priv->master) | ||||
| 		drm_master_put(&file_priv->master); | ||||
| 	file_priv->is_master = 0; | ||||
| 	mutex_unlock(&dev->master_mutex); | ||||
| 
 | ||||
| 	mutex_lock(&dev->struct_mutex); | ||||
|  | ||||
| @ -111,7 +111,7 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) | ||||
| 	/* don't set the block all signals on the master process for now 
 | ||||
| 	 * really probably not the correct answer but lets us debug xkb | ||||
|  	 * xserver for now */ | ||||
| 	if (!file_priv->is_master) { | ||||
| 	if (!drm_is_master(file_priv)) { | ||||
| 		sigemptyset(&dev->sigmask); | ||||
| 		sigaddset(&dev->sigmask, SIGSTOP); | ||||
| 		sigaddset(&dev->sigmask, SIGTSTP); | ||||
|  | ||||
| @ -177,7 +177,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	mutex_lock(&dev->master_mutex); | ||||
| 	if (file_priv->is_master) | ||||
| 	if (drm_is_master(file_priv)) | ||||
| 		goto out_unlock; | ||||
| 
 | ||||
| 	if (file_priv->minor->master) { | ||||
| @ -191,13 +191,10 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, | ||||
| 	} | ||||
| 
 | ||||
| 	file_priv->minor->master = drm_master_get(file_priv->master); | ||||
| 	file_priv->is_master = 1; | ||||
| 	if (dev->driver->master_set) { | ||||
| 		ret = dev->driver->master_set(dev, file_priv, false); | ||||
| 		if (unlikely(ret != 0)) { | ||||
| 			file_priv->is_master = 0; | ||||
| 		if (unlikely(ret != 0)) | ||||
| 			drm_master_put(&file_priv->minor->master); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| out_unlock: | ||||
| @ -211,7 +208,7 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data, | ||||
| 	int ret = -EINVAL; | ||||
| 
 | ||||
| 	mutex_lock(&dev->master_mutex); | ||||
| 	if (!file_priv->is_master) | ||||
| 	if (!drm_is_master(file_priv)) | ||||
| 		goto out_unlock; | ||||
| 
 | ||||
| 	if (!file_priv->minor->master) | ||||
| @ -221,7 +218,6 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data, | ||||
| 	if (dev->driver->master_drop) | ||||
| 		dev->driver->master_drop(dev, file_priv, false); | ||||
| 	drm_master_put(&file_priv->minor->master); | ||||
| 	file_priv->is_master = 0; | ||||
| 
 | ||||
| out_unlock: | ||||
| 	mutex_unlock(&dev->master_mutex); | ||||
|  | ||||
| @ -1260,7 +1260,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, | ||||
| 
 | ||||
| 	flags = 0; | ||||
| 	if (args->flags & I915_EXEC_SECURE) { | ||||
| 		if (!file->is_master || !capable(CAP_SYS_ADMIN)) | ||||
| 		if (!drm_is_master(file) || !capable(CAP_SYS_ADMIN)) | ||||
| 		    return -EPERM; | ||||
| 
 | ||||
| 		flags |= I915_DISPATCH_SECURE; | ||||
| @ -1369,7 +1369,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, | ||||
| 		ret = i915_parse_cmds(ring, | ||||
| 				      batch_obj, | ||||
| 				      args->batch_start_offset, | ||||
| 				      file->is_master); | ||||
| 				      drm_is_master(file)); | ||||
| 		if (ret) | ||||
| 			goto err; | ||||
| 
 | ||||
|  | ||||
| @ -990,7 +990,7 @@ static struct vmw_master *vmw_master_check(struct drm_device *dev, | ||||
| 	if (unlikely(ret != 0)) | ||||
| 		return ERR_PTR(-ERESTARTSYS); | ||||
| 
 | ||||
| 	if (file_priv->is_master) { | ||||
| 	if (drm_is_master(file_priv)) { | ||||
| 		mutex_unlock(&dev->master_mutex); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| @ -182,7 +182,7 @@ static void imx_drm_driver_preclose(struct drm_device *drm, | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
| 	if (!file->is_master) | ||||
| 	if (!drm_is_master(file)) | ||||
| 		return; | ||||
| 
 | ||||
| 	for (i = 0; i < MAX_CRTC; i++) | ||||
|  | ||||
| @ -387,8 +387,6 @@ struct drm_prime_file_private { | ||||
| struct drm_file { | ||||
| 	unsigned always_authenticated :1; | ||||
| 	unsigned authenticated :1; | ||||
| 	/* Whether we're master for a minor. Protected by master_mutex */ | ||||
| 	unsigned is_master :1; | ||||
| 	/* true when the client has asked us to expose stereo 3D mode flags */ | ||||
| 	unsigned stereo_allowed :1; | ||||
| 	/*
 | ||||
| @ -1034,7 +1032,7 @@ struct drm_device { | ||||
| 	/** \name Locks */ | ||||
| 	/*@{ */ | ||||
| 	struct mutex struct_mutex;	/**< For others */ | ||||
| 	struct mutex master_mutex;      /**< For drm_minor::master and drm_file::is_master */ | ||||
| 	struct mutex master_mutex;      /**< For drm_minor::master */ | ||||
| 	/*@} */ | ||||
| 
 | ||||
| 	/** \name Usage Counters */ | ||||
| @ -1172,6 +1170,21 @@ static inline bool drm_is_primary_client(const struct drm_file *file_priv) | ||||
| 	return file_priv->minor->type == DRM_MINOR_LEGACY; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * drm_is_master() - Check whether a DRM open-file is DRM-Master | ||||
|  * @file: DRM open-file context | ||||
|  * | ||||
|  * This checks whether a DRM open-file context is owner of the master context | ||||
|  * attached to it. If a file owns a master context, it's called DRM-Master. | ||||
|  * Per DRM device, only one such file can be DRM-Master at a time. | ||||
|  * | ||||
|  * Returns: True if the file is DRM-Master, otherwise false. | ||||
|  */ | ||||
| static inline bool drm_is_master(const struct drm_file *file) | ||||
| { | ||||
| 	return file->master && file->master == file->minor->master; | ||||
| } | ||||
| 
 | ||||
| /******************************************************************/ | ||||
| /** \name Internal function definitions */ | ||||
| /*@{*/ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user