Commit 0aae5920 authored by Daniel Vetter's avatar Daniel Vetter

drm: Clear up master tracking booleans

- is_master can be removed, we can compute this by checking allowed_master
  (which really just tracks whether a master struct has been allocated
  for this fpriv in either open or set_master), and whether the fpriv is
  the current master on the device.

- that frees up is_master as a good replacement name for allowed_master.
  With that it's clear that it tracks whether the fpriv is a master (with
  possibly clients attached to it and authenticated against it), and that
  one of those fprivs with is_master set is the current master.

v2: Fix kerneldoc for is_master (Emil).

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarEmil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1466499262-18717-10-git-send-email-daniel.vetter@ffwll.ch
parent b3ac9f25
...@@ -116,11 +116,9 @@ static int drm_set_master(struct drm_device *dev, struct drm_file *fpriv, ...@@ -116,11 +116,9 @@ static int drm_set_master(struct drm_device *dev, struct drm_file *fpriv,
int ret = 0; int ret = 0;
dev->master = drm_master_get(fpriv->master); dev->master = drm_master_get(fpriv->master);
fpriv->is_master = 1;
if (dev->driver->master_set) { if (dev->driver->master_set) {
ret = dev->driver->master_set(dev, fpriv, new_master); ret = dev->driver->master_set(dev, fpriv, new_master);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
fpriv->is_master = 0;
drm_master_put(&dev->master); drm_master_put(&dev->master);
} }
} }
...@@ -157,7 +155,7 @@ static int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv) ...@@ -157,7 +155,7 @@ static int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv)
if (ret) if (ret)
goto out_err; goto out_err;
} }
fpriv->allowed_master = 1; fpriv->is_master = 1;
fpriv->authenticated = 1; fpriv->authenticated = 1;
ret = drm_set_master(dev, fpriv, true); ret = drm_set_master(dev, fpriv, true);
...@@ -196,7 +194,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, ...@@ -196,7 +194,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
goto out_unlock; goto out_unlock;
} }
if (!file_priv->allowed_master) { if (!file_priv->is_master) {
ret = drm_new_set_master(dev, file_priv); ret = drm_new_set_master(dev, file_priv);
goto out_unlock; goto out_unlock;
} }
...@@ -213,7 +211,6 @@ static void drm_drop_master(struct drm_device *dev, ...@@ -213,7 +211,6 @@ static void drm_drop_master(struct drm_device *dev,
if (dev->driver->master_drop) if (dev->driver->master_drop)
dev->driver->master_drop(dev, fpriv); dev->driver->master_drop(dev, fpriv);
drm_master_put(&dev->master); drm_master_put(&dev->master);
fpriv->is_master = 0;
} }
int drm_dropmaster_ioctl(struct drm_device *dev, void *data, int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
...@@ -291,7 +288,7 @@ void drm_master_release(struct drm_file *file_priv) ...@@ -291,7 +288,7 @@ void drm_master_release(struct drm_file *file_priv)
bool drm_is_current_master(struct drm_file *fpriv) bool drm_is_current_master(struct drm_file *fpriv)
{ {
return fpriv->is_master; return fpriv->is_master && fpriv->master == fpriv->minor->dev->master;
} }
EXPORT_SYMBOL(drm_is_current_master); EXPORT_SYMBOL(drm_is_current_master);
......
...@@ -303,8 +303,6 @@ struct drm_prime_file_private { ...@@ -303,8 +303,6 @@ struct drm_prime_file_private {
/** File private data */ /** File private data */
struct drm_file { struct drm_file {
unsigned 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 */ /* true when the client has asked us to expose stereo 3D mode flags */
unsigned stereo_allowed :1; unsigned stereo_allowed :1;
/* /*
...@@ -315,10 +313,10 @@ struct drm_file { ...@@ -315,10 +313,10 @@ struct drm_file {
/* true if client understands atomic properties */ /* true if client understands atomic properties */
unsigned atomic:1; unsigned atomic:1;
/* /*
* This client is allowed to gain master privileges for @master. * This client is the creator of @master.
* Protected by struct drm_device::master_mutex. * Protected by struct drm_device::master_mutex.
*/ */
unsigned allowed_master:1; unsigned is_master:1;
struct pid *pid; struct pid *pid;
kuid_t uid; kuid_t uid;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment