From 5b4909f961b9830aba93115dbebd20642d3bcbb8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 20 Sep 2021 12:25:48 +0200 Subject: [PATCH] Revert "drm: serialize drm_file.master with a new spinlock" This reverts commit 06a553a99bacb00d3bc25f79e75c8e0fbf7a5025 which is commit 0b0860a3cf5eccf183760b1177a1dcdb821b0b66 upstream and came into the tree in 5.10.67. The original commit broke the abi and isn't needed for Android systems, so revert it. Fixes: faf816b0f8d0 ("Linux 5.10.67") Signed-off-by: Greg Kroah-Hartman Change-Id: I601e116ea2a590f52fe12f59df5288329318ec1c --- drivers/gpu/drm/drm_auth.c | 17 ++++++----------- drivers/gpu/drm/drm_file.c | 1 - include/drm/drm_file.h | 12 +++--------- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c index 0024ad93d24b..232abbba3686 100644 --- a/drivers/gpu/drm/drm_auth.c +++ b/drivers/gpu/drm/drm_auth.c @@ -135,18 +135,16 @@ static void drm_set_master(struct drm_device *dev, struct drm_file *fpriv, static int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv) { struct drm_master *old_master; - struct drm_master *new_master; lockdep_assert_held_once(&dev->master_mutex); WARN_ON(fpriv->is_master); old_master = fpriv->master; - new_master = drm_master_create(dev); - if (!new_master) + fpriv->master = drm_master_create(dev); + if (!fpriv->master) { + fpriv->master = old_master; return -ENOMEM; - spin_lock(&fpriv->master_lookup_lock); - fpriv->master = new_master; - spin_unlock(&fpriv->master_lookup_lock); + } fpriv->is_master = 1; fpriv->authenticated = 1; @@ -304,13 +302,10 @@ 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); - if (!dev->master) { + if (!dev->master) ret = drm_new_set_master(dev, file_priv); - } else { - spin_lock(&file_priv->master_lookup_lock); + else file_priv->master = drm_master_get(dev->master); - spin_unlock(&file_priv->master_lookup_lock); - } mutex_unlock(&dev->master_mutex); return ret; diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 95b783de0dec..01670305df3d 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -177,7 +177,6 @@ struct drm_file *drm_file_alloc(struct drm_minor *minor) init_waitqueue_head(&file->event_wait); file->event_space = 4096; /* set aside 4k for event buffer */ - spin_lock_init(&file->master_lookup_lock); mutex_init(&file->event_read_lock); if (drm_core_check_feature(dev, DRIVER_GEM)) diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index 9b82988e3427..b81b3bfb08c8 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -226,21 +226,15 @@ struct drm_file { /** * @master: * - * Master this node is currently associated with. Protected by struct - * &drm_device.master_mutex, and serialized by @master_lookup_lock. - * - * Only relevant if drm_is_primary_client() returns true. Note that - * this only matches &drm_device.master if the master is the currently - * active one. + * Master this node is currently associated with. Only relevant if + * drm_is_primary_client() returns true. Note that this only + * matches &drm_device.master if the master is the currently active one. * * See also @authentication and @is_master and the :ref:`section on * primary nodes and authentication `. */ struct drm_master *master; - /** @master_lock: Serializes @master. */ - spinlock_t master_lookup_lock; - /** @pid: Process that opened this file. */ struct pid *pid;