- 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.

Cc: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Thomas Hellstrom <thellstrom at vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 drivers/gpu/drm/drm_auth.c | 9 +++------
 include/drm/drmP.h         | 6 ++----
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
index 4c241e53cbf3..b4dfa8ab20d7 100644
--- a/drivers/gpu/drm/drm_auth.c
+++ b/drivers/gpu/drm/drm_auth.c
@@ -116,11 +116,9 @@ static int drm_set_master(struct drm_device *dev, struct 
drm_file *fpriv,
        int ret = 0;

        dev->master = drm_master_get(fpriv->master);
-       fpriv->is_master = 1;
        if (dev->driver->master_set) {
                ret = dev->driver->master_set(dev, fpriv, new_master);
                if (unlikely(ret != 0)) {
-                       fpriv->is_master = 0;
                        drm_master_put(&dev->master);
                }
        }
@@ -161,7 +159,7 @@ static int drm_new_set_master(struct drm_device *dev, 
struct drm_file *fpriv)
                if (ret)
                        goto out_err;
        }
-       fpriv->allowed_master = 1;
+       fpriv->is_master = 1;
        fpriv->authenticated = 1;

        ret = drm_set_master(dev, fpriv, true);
@@ -198,7 +196,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
                goto out_unlock;
        }

-       if (!file_priv->allowed_master) {
+       if (!file_priv->is_master) {
                ret = drm_new_set_master(dev, file_priv);
                goto out_unlock;
        }
@@ -215,7 +213,6 @@ void drm_drop_master(struct drm_device *dev,
        if (dev->driver->master_drop)
                dev->driver->master_drop(dev, fpriv);
        drm_master_put(&dev->master);
-       fpriv->is_master = 0;
 }

 int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
@@ -293,7 +290,7 @@ out:

 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);

diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index e0599cf24e1e..761b20332321 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -303,8 +303,6 @@ struct drm_prime_file_private {
 /** File private data */
 struct drm_file {
        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;
        /*
@@ -315,10 +313,10 @@ struct drm_file {
        /* true if client understands atomic properties */
        unsigned atomic:1;
        /*
-        * This client is allowed to gain master privileges for @master.
+        * This client is the create the master.
         * Protected by struct drm_device::master_mutex.
         */
-       unsigned allowed_master:1;
+       unsigned is_master:1;

        struct pid *pid;
        kuid_t uid;
-- 
2.8.1

Reply via email to