mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
drm: drm_auth: Convert mutex usage to guard(mutex)
Replace open-coded mutex handling with cleanup.h guard(mutex). This simplifies the code and removes the "goto unlock" pattern. Tested with igt tests core_auth and core_setmaster. Signed-off-by: André Almeida <andrealmeid@igalia.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://lore.kernel.org/r/20250509142627.639419-1-andrealmeid@igalia.com
This commit is contained in:
parent
1f957fbb88
commit
bf31972110
|
|
@ -95,7 +95,7 @@ int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|||
struct drm_auth *auth = data;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
if (!file_priv->magic) {
|
||||
ret = idr_alloc(&file_priv->master->magic_map, file_priv,
|
||||
1, 0, GFP_KERNEL);
|
||||
|
|
@ -103,7 +103,6 @@ int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|||
file_priv->magic = ret;
|
||||
}
|
||||
auth->magic = file_priv->magic;
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
|
||||
drm_dbg_core(dev, "%u\n", auth->magic);
|
||||
|
||||
|
|
@ -118,13 +117,12 @@ int drm_authmagic(struct drm_device *dev, void *data,
|
|||
|
||||
drm_dbg_core(dev, "%u\n", auth->magic);
|
||||
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
file = idr_find(&file_priv->master->magic_map, auth->magic);
|
||||
if (file) {
|
||||
file->authenticated = 1;
|
||||
idr_replace(&file_priv->master->magic_map, NULL, auth->magic);
|
||||
}
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
|
||||
return file ? 0 : -EINVAL;
|
||||
}
|
||||
|
|
@ -248,41 +246,33 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
|
|||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
|
||||
ret = drm_master_check_perm(dev, file_priv);
|
||||
if (ret)
|
||||
goto out_unlock;
|
||||
return ret;
|
||||
|
||||
if (drm_is_current_master_locked(file_priv))
|
||||
goto out_unlock;
|
||||
return ret;
|
||||
|
||||
if (dev->master) {
|
||||
ret = -EBUSY;
|
||||
goto out_unlock;
|
||||
}
|
||||
if (dev->master)
|
||||
return -EBUSY;
|
||||
|
||||
if (!file_priv->master) {
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
if (!file_priv->master)
|
||||
return -EINVAL;
|
||||
|
||||
if (!file_priv->is_master) {
|
||||
ret = drm_new_set_master(dev, file_priv);
|
||||
goto out_unlock;
|
||||
}
|
||||
if (!file_priv->is_master)
|
||||
return drm_new_set_master(dev, file_priv);
|
||||
|
||||
if (file_priv->master->lessor != NULL) {
|
||||
drm_dbg_lease(dev,
|
||||
"Attempt to set lessee %d as master\n",
|
||||
file_priv->master->lessee_id);
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drm_set_master(dev, file_priv, false);
|
||||
out_unlock:
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -299,33 +289,27 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
|
|||
{
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
|
||||
ret = drm_master_check_perm(dev, file_priv);
|
||||
if (ret)
|
||||
goto out_unlock;
|
||||
return ret;
|
||||
|
||||
if (!drm_is_current_master_locked(file_priv)) {
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
if (!drm_is_current_master_locked(file_priv))
|
||||
return -EINVAL;
|
||||
|
||||
if (!dev->master) {
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
if (!dev->master)
|
||||
return -EINVAL;
|
||||
|
||||
if (file_priv->master->lessor != NULL) {
|
||||
drm_dbg_lease(dev,
|
||||
"Attempt to drop lessee %d as master\n",
|
||||
file_priv->master->lessee_id);
|
||||
ret = -EINVAL;
|
||||
goto out_unlock;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drm_drop_master(dev, file_priv);
|
||||
out_unlock:
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -337,7 +321,7 @@ int drm_master_open(struct drm_file *file_priv)
|
|||
/* if there is no current master make this fd it, but do not create
|
||||
* any master object for render clients
|
||||
*/
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
if (!dev->master) {
|
||||
ret = drm_new_set_master(dev, file_priv);
|
||||
} else {
|
||||
|
|
@ -345,7 +329,6 @@ int drm_master_open(struct drm_file *file_priv)
|
|||
file_priv->master = drm_master_get(dev->master);
|
||||
spin_unlock(&file_priv->master_lookup_lock);
|
||||
}
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -355,7 +338,7 @@ void drm_master_release(struct drm_file *file_priv)
|
|||
struct drm_device *dev = file_priv->minor->dev;
|
||||
struct drm_master *master;
|
||||
|
||||
mutex_lock(&dev->master_mutex);
|
||||
guard(mutex)(&dev->master_mutex);
|
||||
master = file_priv->master;
|
||||
if (file_priv->magic)
|
||||
idr_remove(&file_priv->master->magic_map, file_priv->magic);
|
||||
|
|
@ -376,7 +359,6 @@ void drm_master_release(struct drm_file *file_priv)
|
|||
/* drop the master reference held by the file priv */
|
||||
if (file_priv->master)
|
||||
drm_master_put(&file_priv->master);
|
||||
mutex_unlock(&dev->master_mutex);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user