From: Rob Clark <robdclark@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: Rob Clark <robdclark@chromium.org>,
Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>,
David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
linux-arm-msm@vger.kernel.org (open list:DRM DRIVER FOR MSM
ADRENO GPU),
freedreno@lists.freedesktop.org (open list:DRM DRIVER FOR MSM
ADRENO GPU), linux-kernel@vger.kernel.org (open list)
Subject: [PATCH 13/14] drm/msm: Drop struct_mutex in shrinker path
Date: Sun, 4 Oct 2020 12:21:45 -0700 [thread overview]
Message-ID: <20201004192152.3298573-14-robdclark@gmail.com> (raw)
In-Reply-To: <20201004192152.3298573-1-robdclark@gmail.com>
From: Rob Clark <robdclark@chromium.org>
Now that the inactive_list is protected by mm_lock, and everything
else on per-obj basis is protected by obj->lock, we no longer depend
on struct_mutex.
Signed-off-by: Rob Clark <robdclark@chromium.org>
---
drivers/gpu/drm/msm/msm_gem.c | 1 -
drivers/gpu/drm/msm/msm_gem_shrinker.c | 54 --------------------------
2 files changed, 55 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 9cdac4f7228c..e749a1c6f4e0 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -654,7 +654,6 @@ void msm_gem_purge(struct drm_gem_object *obj, enum msm_gem_lock subclass)
struct drm_device *dev = obj->dev;
struct msm_gem_object *msm_obj = to_msm_bo(obj);
- WARN_ON(!mutex_is_locked(&dev->struct_mutex));
WARN_ON(!is_purgeable(msm_obj, subclass));
WARN_ON(obj->import_attach);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index 39a1b5327267..2c7bda1e2bf9 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -8,48 +8,13 @@
#include "msm_gem.h"
#include "msm_gpu_trace.h"
-static bool msm_gem_shrinker_lock(struct drm_device *dev, bool *unlock)
-{
- /* NOTE: we are *closer* to being able to get rid of
- * mutex_trylock_recursive().. the msm_gem code itself does
- * not need struct_mutex, although codepaths that can trigger
- * shrinker are still called in code-paths that hold the
- * struct_mutex.
- *
- * Also, msm_obj->madv is protected by struct_mutex.
- *
- * The next step is probably split out a seperate lock for
- * protecting inactive_list, so that shrinker does not need
- * struct_mutex.
- */
- switch (mutex_trylock_recursive(&dev->struct_mutex)) {
- case MUTEX_TRYLOCK_FAILED:
- return false;
-
- case MUTEX_TRYLOCK_SUCCESS:
- *unlock = true;
- return true;
-
- case MUTEX_TRYLOCK_RECURSIVE:
- *unlock = false;
- return true;
- }
-
- BUG();
-}
-
static unsigned long
msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
{
struct msm_drm_private *priv =
container_of(shrinker, struct msm_drm_private, shrinker);
- struct drm_device *dev = priv->dev;
struct msm_gem_object *msm_obj;
unsigned long count = 0;
- bool unlock;
-
- if (!msm_gem_shrinker_lock(dev, &unlock))
- return 0;
mutex_lock(&priv->mm_lock);
@@ -60,9 +25,6 @@ msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
mutex_unlock(&priv->mm_lock);
- if (unlock)
- mutex_unlock(&dev->struct_mutex);
-
return count;
}
@@ -71,13 +33,8 @@ msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
{
struct msm_drm_private *priv =
container_of(shrinker, struct msm_drm_private, shrinker);
- struct drm_device *dev = priv->dev;
struct msm_gem_object *msm_obj;
unsigned long freed = 0;
- bool unlock;
-
- if (!msm_gem_shrinker_lock(dev, &unlock))
- return SHRINK_STOP;
mutex_lock(&priv->mm_lock);
@@ -92,9 +49,6 @@ msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
mutex_unlock(&priv->mm_lock);
- if (unlock)
- mutex_unlock(&dev->struct_mutex);
-
if (freed > 0)
trace_msm_gem_purge(freed << PAGE_SHIFT);
@@ -106,13 +60,8 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
{
struct msm_drm_private *priv =
container_of(nb, struct msm_drm_private, vmap_notifier);
- struct drm_device *dev = priv->dev;
struct msm_gem_object *msm_obj;
unsigned unmapped = 0;
- bool unlock;
-
- if (!msm_gem_shrinker_lock(dev, &unlock))
- return NOTIFY_DONE;
mutex_lock(&priv->mm_lock);
@@ -130,9 +79,6 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
mutex_unlock(&priv->mm_lock);
- if (unlock)
- mutex_unlock(&dev->struct_mutex);
-
*(unsigned long *)ptr += unmapped;
if (unmapped > 0)
--
2.26.2
next prev parent reply other threads:[~2020-10-04 19:21 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-04 19:21 [PATCH 00/14] drm/msm: de-struct_mutex-ification Rob Clark
2020-10-04 19:21 ` [PATCH 01/14] drm/msm: Use correct drm_gem_object_put() in fail case Rob Clark
2020-10-04 19:21 ` [PATCH 02/14] drm/msm: Drop chatty trace Rob Clark
2020-10-05 14:15 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 03/14] drm/msm: Move update_fences() Rob Clark
2020-10-05 14:16 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 04/14] drm/msm: Add priv->mm_lock to protect active/inactive lists Rob Clark
2020-10-04 22:15 ` Daniel Vetter
2020-10-05 0:10 ` Rob Clark
2020-10-05 14:19 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 05/14] drm/msm: Document and rename preempt_lock Rob Clark
2020-10-05 14:22 ` Jordan Crouse
2020-10-04 19:21 ` [PATCH 06/14] drm/msm: Protect ring->submits with it's own lock Rob Clark
2020-10-05 14:23 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 07/14] drm/msm: Refcount submits Rob Clark
2020-10-05 13:56 ` Daniel Vetter
2020-10-05 16:24 ` Rob Clark
2020-10-05 14:27 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 08/14] drm/msm: Remove obj->gpu Rob Clark
2020-10-05 14:28 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 09/14] drm/msm: Drop struct_mutex from the retire path Rob Clark
2020-10-05 14:29 ` [Freedreno] " Jordan Crouse
2020-10-04 19:21 ` [PATCH 10/14] drm/msm: Drop struct_mutex in free_object() path Rob Clark
2020-10-04 19:21 ` [PATCH 11/14] drm/msm: remove msm_gem_free_work Rob Clark
2020-10-04 19:21 ` [PATCH 12/14] drm/msm: drop struct_mutex in madvise path Rob Clark
2020-10-04 19:21 ` Rob Clark [this message]
2020-10-04 19:21 ` [PATCH 14/14] drm/msm: Don't implicit-sync if only a single ring Rob Clark
[not found] ` <20201005092419.15608-1-hdanton@sina.com>
2020-10-05 14:02 ` [PATCH 13/14] drm/msm: Drop struct_mutex in shrinker path Daniel Vetter
2020-10-05 16:17 ` Kristian Høgsberg
[not found] ` <20201006004416.15040-1-hdanton@sina.com>
2020-10-06 3:40 ` Rob Clark
2020-10-06 9:35 ` Daniel Vetter
2020-10-05 16:49 ` Rob Clark
2020-10-05 18:18 ` Daniel Vetter
2020-10-05 16:24 ` [Freedreno] [PATCH 00/14] drm/msm: de-struct_mutex-ification Kristian Høgsberg
2020-10-05 18:20 ` Daniel Vetter
2020-10-06 3:25 ` Rob Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201004192152.3298573-14-robdclark@gmail.com \
--to=robdclark@gmail.com \
--cc=airlied@linux.ie \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robdclark@chromium.org \
--cc=sean@poorly.run \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).