Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b008426 authored by Jonas Bonn's avatar Jonas Bonn Committed by Dave Airlie
Browse files

drm: set/clear is_master when master changed



The variable is_master is being used to track the drm_file that is currently
master, so its value needs to be updated accordingly when the master is
changed.

Signed-off-by: default avatarJonas Bonn <jonas@southpole.se>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 77d26dc9
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -159,6 +159,9 @@ void drm_master_put(struct drm_master **master)
int drm_setmaster_ioctl(struct drm_device *dev, void *data,
			struct drm_file *file_priv)
{
	if (file_priv->is_master)
		return 0;

	if (file_priv->minor->master && file_priv->minor->master != file_priv->master)
		return -EINVAL;

@@ -169,6 +172,7 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
	    file_priv->minor->master != file_priv->master) {
		mutex_lock(&dev->struct_mutex);
		file_priv->minor->master = drm_master_get(file_priv->master);
		file_priv->is_master = 1;
		mutex_unlock(&dev->struct_mutex);
	}

@@ -178,10 +182,12 @@ int drm_setmaster_ioctl(struct drm_device *dev, void *data,
int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
			 struct drm_file *file_priv)
{
	if (!file_priv->master)
	if (!file_priv->is_master)
		return -EINVAL;

	mutex_lock(&dev->struct_mutex);
	drm_master_put(&file_priv->minor->master);
	file_priv->is_master = 0;
	mutex_unlock(&dev->struct_mutex);
	return 0;
}