Commit b3ac9f25 authored by Daniel Vetter's avatar Daniel Vetter

drm: Extract drm_is_current_master

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: 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>
parent d6ed682e
...@@ -183,7 +183,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data, ...@@ -183,7 +183,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
int ret = 0; int ret = 0;
mutex_lock(&dev->master_mutex); mutex_lock(&dev->master_mutex);
if (file_priv->is_master) if (drm_is_current_master(file_priv))
goto out_unlock; goto out_unlock;
if (dev->master) { if (dev->master) {
...@@ -222,7 +222,7 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data, ...@@ -222,7 +222,7 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
int ret = -EINVAL; int ret = -EINVAL;
mutex_lock(&dev->master_mutex); mutex_lock(&dev->master_mutex);
if (!file_priv->is_master) if (!drm_is_current_master(file_priv))
goto out_unlock; goto out_unlock;
if (!dev->master) if (!dev->master)
...@@ -261,7 +261,7 @@ void drm_master_release(struct drm_file *file_priv) ...@@ -261,7 +261,7 @@ void drm_master_release(struct drm_file *file_priv)
if (file_priv->magic) if (file_priv->magic)
idr_remove(&file_priv->master->magic_map, 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; goto out;
if (!drm_core_check_feature(dev, DRIVER_MODESET)) { if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
...@@ -289,6 +289,12 @@ void drm_master_release(struct drm_file *file_priv) ...@@ -289,6 +289,12 @@ void drm_master_release(struct drm_file *file_priv)
mutex_unlock(&dev->master_mutex); 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) struct drm_master *drm_master_get(struct drm_master *master)
{ {
kref_get(&master->refcount); kref_get(&master->refcount);
......
...@@ -3643,7 +3643,7 @@ int drm_mode_getfb(struct drm_device *dev, ...@@ -3643,7 +3643,7 @@ int drm_mode_getfb(struct drm_device *dev,
r->bpp = fb->bits_per_pixel; r->bpp = fb->bits_per_pixel;
r->pitch = fb->pitches[0]; r->pitch = fb->pitches[0];
if (fb->funcs->create_handle) { 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)) { drm_is_control_client(file_priv)) {
ret = fb->funcs->create_handle(fb, file_priv, ret = fb->funcs->create_handle(fb, file_priv,
&r->handle); &r->handle);
......
...@@ -102,7 +102,7 @@ int drm_clients_info(struct seq_file *m, void *data) ...@@ -102,7 +102,7 @@ int drm_clients_info(struct seq_file *m, void *data)
task ? task->comm : "<unknown>", task ? task->comm : "<unknown>",
pid_vnr(priv->pid), pid_vnr(priv->pid),
priv->minor->index, priv->minor->index,
priv->is_master ? 'y' : 'n', drm_is_current_master(priv) ? 'y' : 'n',
priv->authenticated ? 'y' : 'n', priv->authenticated ? 'y' : 'n',
from_kuid_munged(seq_user_ns(m), priv->uid), from_kuid_munged(seq_user_ns(m), priv->uid),
priv->magic); priv->magic);
......
...@@ -481,7 +481,8 @@ int drm_ioctl_permit(u32 flags, struct drm_file *file_priv) ...@@ -481,7 +481,8 @@ int drm_ioctl_permit(u32 flags, struct drm_file *file_priv)
return -EACCES; return -EACCES;
/* MASTER is only for master or control clients */ /* 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))) !drm_is_control_client(file_priv)))
return -EACCES; return -EACCES;
......
...@@ -219,7 +219,7 @@ int drm_legacy_lock(struct drm_device *dev, void *data, ...@@ -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 /* don't set the block all signals on the master process for now
* really probably not the correct answer but lets us debug xkb * really probably not the correct answer but lets us debug xkb
* xserver for now */ * xserver for now */
if (!file_priv->is_master) { if (!drm_is_current_master(file_priv)) {
dev->sigdata.context = lock->context; dev->sigdata.context = lock->context;
dev->sigdata.lock = master->lock.hw_lock; dev->sigdata.lock = master->lock.hw_lock;
} }
......
...@@ -1446,7 +1446,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, ...@@ -1446,7 +1446,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
dispatch_flags = 0; dispatch_flags = 0;
if (args->flags & I915_EXEC_SECURE) { 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; return -EPERM;
dispatch_flags |= I915_DISPATCH_SECURE; dispatch_flags |= I915_DISPATCH_SECURE;
...@@ -1553,7 +1553,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, ...@@ -1553,7 +1553,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
batch_obj, batch_obj,
args->batch_start_offset, args->batch_start_offset,
args->batch_len, args->batch_len,
file->is_master); drm_is_current_master(file));
if (IS_ERR(parsed_batch_obj)) { if (IS_ERR(parsed_batch_obj)) {
ret = PTR_ERR(parsed_batch_obj); ret = PTR_ERR(parsed_batch_obj);
goto err; goto err;
......
...@@ -1049,7 +1049,7 @@ static struct vmw_master *vmw_master_check(struct drm_device *dev, ...@@ -1049,7 +1049,7 @@ static struct vmw_master *vmw_master_check(struct drm_device *dev,
if (unlikely(ret != 0)) if (unlikely(ret != 0))
return ERR_PTR(-ERESTARTSYS); return ERR_PTR(-ERESTARTSYS);
if (file_priv->is_master) { if (drm_is_current_master(file_priv)) {
mutex_unlock(&dev->master_mutex); mutex_unlock(&dev->master_mutex);
return NULL; return NULL;
} }
......
...@@ -1014,14 +1014,15 @@ static inline wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc ...@@ -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_pre_modeset(struct drm_device *dev, unsigned int pipe);
extern void drm_vblank_post_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) */ /* drm_auth.c */
extern struct drm_master *drm_master_get(struct drm_master *master); struct drm_master *drm_master_get(struct drm_master *master);
extern void drm_master_put(struct drm_master **master); void drm_master_put(struct drm_master **master);
bool drm_is_current_master(struct drm_file *fpriv);
extern void drm_put_dev(struct drm_device *dev);
extern void drm_unplug_dev(struct drm_device *dev); /* 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 unsigned int drm_debug;
extern bool drm_atomic;
/* Debugfs support */ /* Debugfs support */
#if defined(CONFIG_DEBUG_FS) #if defined(CONFIG_DEBUG_FS)
......
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