drm: Extract drm_is_current_master
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 21 Jun 2016 08:54:20 +0000 (10:54 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 21 Jun 2016 19:58:12 +0000 (21:58 +0200)
Just rolling out a bit of abstraction to be able to clean
up the master logic in the next step.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
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@ffwll.ch>
drivers/gpu/drm/drm_auth.c
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_info.c
drivers/gpu/drm/drm_ioctl.c
drivers/gpu/drm/drm_lock.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
include/drm/drmP.h

index 2794a4f3a105f6c77afe1f802c7b78b5c6c20f7e..dc33387519cb98fe6b80efeb6b0f82ac41639857 100644 (file)
@@ -183,7 +183,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_current_master(file_priv))
                goto out_unlock;
 
        if (dev->master) {
@@ -222,7 +222,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_current_master(file_priv))
                goto out_unlock;
 
        if (!dev->master)
@@ -261,7 +261,7 @@ void drm_master_release(struct drm_file *file_priv)
        if (file_priv->magic)
                idr_remove(&file_priv->master->magic_map, file_priv->magic);
 
-       if (!file_priv->is_master)
+       if (!drm_is_current_master(file_priv))
                goto out;
 
        if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
@@ -289,6 +289,12 @@ out:
        mutex_unlock(&dev->master_mutex);
 }
 
+bool drm_is_current_master(struct drm_file *fpriv)
+{
+       return fpriv->is_master;
+}
+EXPORT_SYMBOL(drm_is_current_master);
+
 struct drm_master *drm_master_get(struct drm_master *master)
 {
        kref_get(&master->refcount);
index 481f04696804d0bae28e15a3dc111b6a36f16c1a..e9cae0b7d7cd6d784b1505da9861457c9d12490a 100644 (file)
@@ -3643,7 +3643,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_current_master(file_priv) || capable(CAP_SYS_ADMIN) ||
                    drm_is_control_client(file_priv)) {
                        ret = fb->funcs->create_handle(fb, file_priv,
                                                       &r->handle);
index d6cfd5340d52da2177da41586c8de024a378a1c0..9ae353f4dd06a562cd226292e6e53b0b5517c5d5 100644 (file)
@@ -102,7 +102,7 @@ int drm_clients_info(struct seq_file *m, void *data)
                           task ? task->comm : "<unknown>",
                           pid_vnr(priv->pid),
                           priv->minor->index,
-                          priv->is_master ? 'y' : 'n',
+                          drm_is_current_master(priv) ? 'y' : 'n',
                           priv->authenticated ? 'y' : 'n',
                           from_kuid_munged(seq_user_ns(m), priv->uid),
                           priv->magic);
index ffd6a27952300de56cb69b0ea22362f3916fdc1c..827d221d69ce202a89d51991c94be832aa5a774b 100644 (file)
@@ -481,7 +481,8 @@ 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_current_master(file_priv) &&
                     !drm_is_control_client(file_priv)))
                return -EACCES;
 
index ae0a4d39deecbc53d03a06b05309f8ddefefc20b..48ac0ebbd6634e947fecbd701d96818152b0e9cc 100644 (file)
@@ -219,7 +219,7 @@ int drm_legacy_lock(struct drm_device *dev, void *data,
        /* 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_current_master(file_priv)) {
                dev->sigdata.context = lock->context;
                dev->sigdata.lock = master->lock.hw_lock;
        }
index 8097698b96220aec50f60c52a7394683f861ca53..7941f1fe9cd24e449678ae1de4f4918246e06196 100644 (file)
@@ -1446,7 +1446,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
 
        dispatch_flags = 0;
        if (args->flags & I915_EXEC_SECURE) {
-               if (!file->is_master || !capable(CAP_SYS_ADMIN))
+               if (!drm_is_current_master(file) || !capable(CAP_SYS_ADMIN))
                    return -EPERM;
 
                dispatch_flags |= I915_DISPATCH_SECURE;
@@ -1553,7 +1553,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
                                                             batch_obj,
                                                             args->batch_start_offset,
                                                             args->batch_len,
-                                                            file->is_master);
+                                                            drm_is_current_master(file));
                if (IS_ERR(parsed_batch_obj)) {
                        ret = PTR_ERR(parsed_batch_obj);
                        goto err;
index 35eedc9d44facdb05df1bc6b8e5fa0efbce34a5b..60646644bef36a8c2f889f6aa24dfe5a40fdac43 100644 (file)
@@ -1049,7 +1049,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_current_master(file_priv)) {
                mutex_unlock(&dev->master_mutex);
                return NULL;
        }
index edbf32e300cb9016240ef6ab5063d4be7f7567bc..8d976ff5eecc43531e2991765aed16a5ab33b9dc 100644 (file)
@@ -1014,14 +1014,15 @@ static inline wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc
 extern void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe);
 extern void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe);
 
-                               /* Stub support (drm_stub.h) */
-extern struct drm_master *drm_master_get(struct drm_master *master);
-extern void drm_master_put(struct drm_master **master);
-
-extern void drm_put_dev(struct drm_device *dev);
-extern void drm_unplug_dev(struct drm_device *dev);
+/* drm_auth.c */
+struct drm_master *drm_master_get(struct drm_master *master);
+void drm_master_put(struct drm_master **master);
+bool drm_is_current_master(struct drm_file *fpriv);
+
+/* drm_drv.c */
+void drm_put_dev(struct drm_device *dev);
+void drm_unplug_dev(struct drm_device *dev);
 extern unsigned int drm_debug;
-extern bool drm_atomic;
 
                                /* Debugfs support */
 #if defined(CONFIG_DEBUG_FS)