From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Fix a race between vma / object destruction and unbinding
Date: Thu, 27 Jan 2022 12:57:18 +0100 [thread overview]
Message-ID: <dbd425f4-2398-124f-7d60-769d0e8a89aa@linux.intel.com> (raw)
In-Reply-To: <20220127115622.302970-1-thomas.hellstrom@linux.intel.com>
Op 27-01-2022 om 12:56 schreef Thomas Hellström:
> The vma destruction code was using an unlocked advisory check for
> drm_mm_node_allocated() to avoid racing with eviction code unbinding
> the vma.
>
> This is very fragile and prohibits the dereference of non-refcounted
> pointers of dying vmas after a call to __i915_vma_unbind(). It also
> prohibits the dereference of vma->obj of refcounted pointers of
> dying vmas after a call to __i915_vma_unbind(), since even if a
> refcount is held on the vma, that won't guarantee that its backing
> object doesn't get destroyed.
>
> So introduce an unbind under the vm mutex at object destroy time,
> removing all weak references of the vma and its object from the
> object vma list and from the vm bound list.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/i915/gem/i915_gem_object.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
> index 1a9e1f940a7d..e03e362d320b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
> @@ -280,6 +280,12 @@ void __i915_gem_object_pages_fini(struct drm_i915_gem_object *obj)
> GEM_BUG_ON(vma->obj != obj);
> spin_unlock(&obj->vma.lock);
>
> + /* Verify that the vma is unbound under the vm mutex. */
> + mutex_lock(&vma->vm->mutex);
> + atomic_and(~I915_VMA_PIN_MASK, &vma->flags);
> + __i915_vma_unbind(vma);
> + mutex_unlock(&vma->vm->mutex);
> +
> __i915_vma_put(vma);
>
> spin_lock(&obj->vma.lock);
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
WARNING: multiple messages have this Message-ID (diff)
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915: Fix a race between vma / object destruction and unbinding
Date: Thu, 27 Jan 2022 12:57:18 +0100 [thread overview]
Message-ID: <dbd425f4-2398-124f-7d60-769d0e8a89aa@linux.intel.com> (raw)
In-Reply-To: <20220127115622.302970-1-thomas.hellstrom@linux.intel.com>
Op 27-01-2022 om 12:56 schreef Thomas Hellström:
> The vma destruction code was using an unlocked advisory check for
> drm_mm_node_allocated() to avoid racing with eviction code unbinding
> the vma.
>
> This is very fragile and prohibits the dereference of non-refcounted
> pointers of dying vmas after a call to __i915_vma_unbind(). It also
> prohibits the dereference of vma->obj of refcounted pointers of
> dying vmas after a call to __i915_vma_unbind(), since even if a
> refcount is held on the vma, that won't guarantee that its backing
> object doesn't get destroyed.
>
> So introduce an unbind under the vm mutex at object destroy time,
> removing all weak references of the vma and its object from the
> object vma list and from the vm bound list.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/i915/gem/i915_gem_object.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
> index 1a9e1f940a7d..e03e362d320b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
> @@ -280,6 +280,12 @@ void __i915_gem_object_pages_fini(struct drm_i915_gem_object *obj)
> GEM_BUG_ON(vma->obj != obj);
> spin_unlock(&obj->vma.lock);
>
> + /* Verify that the vma is unbound under the vm mutex. */
> + mutex_lock(&vma->vm->mutex);
> + atomic_and(~I915_VMA_PIN_MASK, &vma->flags);
> + __i915_vma_unbind(vma);
> + mutex_unlock(&vma->vm->mutex);
> +
> __i915_vma_put(vma);
>
> spin_lock(&obj->vma.lock);
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
next prev parent reply other threads:[~2022-01-27 11:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-27 11:56 [Intel-gfx] [PATCH] drm/i915: Fix a race between vma / object destruction and unbinding Thomas Hellström
2022-01-27 11:56 ` Thomas Hellström
2022-01-27 11:57 ` Maarten Lankhorst [this message]
2022-01-27 11:57 ` Maarten Lankhorst
2022-01-27 14:03 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
2022-01-27 18:02 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-01-28 6:10 ` Thomas Hellström
2022-01-28 22:32 ` [Intel-gfx] [PATCH] " Tvrtko Ursulin
2022-01-29 11:38 ` Thomas Hellström
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=dbd425f4-2398-124f-7d60-769d0e8a89aa@linux.intel.com \
--to=maarten.lankhorst@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=thomas.hellstrom@linux.intel.com \
/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 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.