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: 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>
This commit is contained in:
parent
d6ed682eba
commit
b3ac9f2591
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
/* 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);
|
||||
|
||||
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 bool drm_atomic;
|
||||
|
||||
/* Debugfs support */
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
|
|
Loading…
Reference in New Issue