Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48ba8137 authored by David Herrmann's avatar David Herrmann
Browse files

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: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
parent 9f8d21ea
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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;

+1 −3
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);
+3 −7
Original line number Diff line number Diff line
@@ -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,14 +191,11 @@ 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:
	mutex_unlock(&dev->master_mutex);
@@ -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);
Loading