From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter <daniel@ffwll.ch>, Rob Clark <robdclark@chromium.org>, Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>, 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 v3 21/23] drm/msm: Drop struct_mutex in madvise path Date: Mon, 19 Oct 2020 13:46:22 -0700 [thread overview] Message-ID: <20201019204636.139997-22-robdclark@gmail.com> (raw) In-Reply-To: <20201019204636.139997-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. they might not get want they want if they race with shrinker. But iova fault handling is robust enough, and userspace is only shooting it's own foot. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/msm/msm_drv.c | 11 ++--------- drivers/gpu/drm/msm/msm_gem.c | 4 +--- drivers/gpu/drm/msm/msm_gem.h | 2 -- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index ebcd8e827363..4d808769e6ed 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -939,14 +939,9 @@ static int msm_ioctl_gem_madvise(struct drm_device *dev, void *data, return -EINVAL; } - ret = mutex_lock_interruptible(&dev->struct_mutex); - if (ret) - return ret; - obj = drm_gem_object_lookup(file, args->handle); if (!obj) { - ret = -ENOENT; - goto unlock; + return -ENOENT; } ret = msm_gem_madvise(obj, args->madv); @@ -955,10 +950,8 @@ static int msm_ioctl_gem_madvise(struct drm_device *dev, void *data, ret = 0; } - drm_gem_object_put_locked(obj); + drm_gem_object_put(obj); -unlock: - mutex_unlock(&dev->struct_mutex); return ret; } diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 827c7397ed12..c39ba9030001 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -673,8 +673,6 @@ int msm_gem_madvise(struct drm_gem_object *obj, unsigned madv) msm_gem_lock(obj); - WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex)); - if (msm_obj->madv != __MSM_MADV_PURGED) msm_obj->madv = madv; @@ -691,7 +689,6 @@ void msm_gem_purge(struct drm_gem_object *obj) struct msm_gem_object *msm_obj = to_msm_bo(obj); WARN_ON(!mutex_is_locked(&dev->struct_mutex)); - WARN_ON(!msm_gem_is_locked(obj)); WARN_ON(!is_purgeable(msm_obj)); WARN_ON(obj->import_attach); @@ -771,6 +768,7 @@ void msm_gem_active_get(struct drm_gem_object *obj, struct msm_gpu *gpu) struct msm_drm_private *priv = obj->dev->dev_private; might_sleep(); + WARN_ON(!msm_gem_is_locked(obj)); WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED); if (!atomic_fetch_inc(&msm_obj->active_count)) { diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h index ffa2130ee97d..d79e7019cc88 100644 --- a/drivers/gpu/drm/msm/msm_gem.h +++ b/drivers/gpu/drm/msm/msm_gem.h @@ -190,8 +190,6 @@ static inline bool is_active(struct msm_gem_object *msm_obj) static inline bool is_purgeable(struct msm_gem_object *msm_obj) { - WARN_ON(!msm_gem_is_locked(&msm_obj->base)); - WARN_ON(!mutex_is_locked(&msm_obj->base.dev->struct_mutex)); return (msm_obj->madv == MSM_MADV_DONTNEED) && msm_obj->sgt && !msm_obj->base.dma_buf && !msm_obj->base.import_attach; } -- 2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org Cc: Rob Clark <robdclark@chromium.org>, "open list:DRM DRIVER FOR MSM ADRENO GPU" <freedreno@lists.freedesktop.org>, David Airlie <airlied@linux.ie>, "open list:DRM DRIVER FOR MSM ADRENO GPU" <linux-arm-msm@vger.kernel.org>, open list <linux-kernel@vger.kernel.org>, Sean Paul <sean@poorly.run> Subject: [PATCH v3 21/23] drm/msm: Drop struct_mutex in madvise path Date: Mon, 19 Oct 2020 13:46:22 -0700 [thread overview] Message-ID: <20201019204636.139997-22-robdclark@gmail.com> (raw) In-Reply-To: <20201019204636.139997-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> The obj->lock is sufficient for what we need. This *does* have the implication that userspace can try to shoot themselves in the foot by racing madvise(DONTNEED) with submit. But the result will be about the same if they did madvise(DONTNEED) before the submit ioctl, ie. they might not get want they want if they race with shrinker. But iova fault handling is robust enough, and userspace is only shooting it's own foot. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/msm/msm_drv.c | 11 ++--------- drivers/gpu/drm/msm/msm_gem.c | 4 +--- drivers/gpu/drm/msm/msm_gem.h | 2 -- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index ebcd8e827363..4d808769e6ed 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -939,14 +939,9 @@ static int msm_ioctl_gem_madvise(struct drm_device *dev, void *data, return -EINVAL; } - ret = mutex_lock_interruptible(&dev->struct_mutex); - if (ret) - return ret; - obj = drm_gem_object_lookup(file, args->handle); if (!obj) { - ret = -ENOENT; - goto unlock; + return -ENOENT; } ret = msm_gem_madvise(obj, args->madv); @@ -955,10 +950,8 @@ static int msm_ioctl_gem_madvise(struct drm_device *dev, void *data, ret = 0; } - drm_gem_object_put_locked(obj); + drm_gem_object_put(obj); -unlock: - mutex_unlock(&dev->struct_mutex); return ret; } diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 827c7397ed12..c39ba9030001 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -673,8 +673,6 @@ int msm_gem_madvise(struct drm_gem_object *obj, unsigned madv) msm_gem_lock(obj); - WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex)); - if (msm_obj->madv != __MSM_MADV_PURGED) msm_obj->madv = madv; @@ -691,7 +689,6 @@ void msm_gem_purge(struct drm_gem_object *obj) struct msm_gem_object *msm_obj = to_msm_bo(obj); WARN_ON(!mutex_is_locked(&dev->struct_mutex)); - WARN_ON(!msm_gem_is_locked(obj)); WARN_ON(!is_purgeable(msm_obj)); WARN_ON(obj->import_attach); @@ -771,6 +768,7 @@ void msm_gem_active_get(struct drm_gem_object *obj, struct msm_gpu *gpu) struct msm_drm_private *priv = obj->dev->dev_private; might_sleep(); + WARN_ON(!msm_gem_is_locked(obj)); WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED); if (!atomic_fetch_inc(&msm_obj->active_count)) { diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h index ffa2130ee97d..d79e7019cc88 100644 --- a/drivers/gpu/drm/msm/msm_gem.h +++ b/drivers/gpu/drm/msm/msm_gem.h @@ -190,8 +190,6 @@ static inline bool is_active(struct msm_gem_object *msm_obj) static inline bool is_purgeable(struct msm_gem_object *msm_obj) { - WARN_ON(!msm_gem_is_locked(&msm_obj->base)); - WARN_ON(!mutex_is_locked(&msm_obj->base.dev->struct_mutex)); return (msm_obj->madv == MSM_MADV_DONTNEED) && msm_obj->sgt && !msm_obj->base.dma_buf && !msm_obj->base.import_attach; } -- 2.26.2 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2020-10-19 20:46 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-19 20:46 [PATCH v3 00/23] drm/msm: de-struct_mutex-ification Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 01/23] drm/msm: Fix a couple incorrect usages of get_vaddr_active() Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 02/23] drm/msm/gem: Add obj->lock wrappers Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 03/23] drm/msm/gem: Rename internal get_iova_locked helper Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 04/23] drm/msm/gem: Move prototypes to msm_gem.h Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 05/23] drm/msm/gem: Add some _locked() helpers Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 06/23] drm/msm/gem: Move locking in shrinker path Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-23 8:55 ` [Freedreno] " Kristian Høgsberg 2020-10-23 8:55 ` Kristian Høgsberg 2020-10-23 14:46 ` Rob Clark 2020-10-23 14:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 07/23] drm/msm/submit: Move copy_from_user ahead of locking bos Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-23 9:08 ` [Freedreno] " Kristian Høgsberg 2020-10-23 9:08 ` Kristian Høgsberg 2020-10-19 20:46 ` [PATCH v3 08/23] drm/msm: Do rpm get sooner in the submit path Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 09/23] drm/msm/gem: Switch over to obj->resv for locking Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 10/23] drm/msm: Use correct drm_gem_object_put() in fail case Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 11/23] drm/msm: Drop chatty trace Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 12/23] drm/msm: Move update_fences() Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 13/23] drm/msm: Add priv->mm_lock to protect active/inactive lists Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 14/23] drm/msm: Document and rename preempt_lock Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 15/23] drm/msm: Protect ring->submits with it's own lock Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 16/23] drm/msm: Refcount submits Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 17/23] drm/msm: Remove obj->gpu Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 18/23] drm/msm: Drop struct_mutex from the retire path Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 19/23] drm/msm: Drop struct_mutex in free_object() path Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 20/23] drm/msm: Remove msm_gem_free_work Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` Rob Clark [this message] 2020-10-19 20:46 ` [PATCH v3 21/23] drm/msm: Drop struct_mutex in madvise path Rob Clark 2020-10-19 20:46 ` [PATCH v3 22/23] drm/msm: Drop struct_mutex in shrinker path Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-19 20:46 ` [PATCH v3 23/23] drm/msm: Don't implicit-sync if only a single ring Rob Clark 2020-10-19 20:46 ` Rob Clark 2020-10-23 10:58 ` [Freedreno] [PATCH v3 00/23] drm/msm: de-struct_mutex-ification Kristian Høgsberg 2020-10-23 10:58 ` Kristian Høgsberg
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=20201019204636.139997-22-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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.