From: Boris Brezillon <boris.brezillon@collabora.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Steven Price" <steven.price@arm.com>,
"Liviu Dudau" <liviu.dudau@arm.com>,
"Rob Clark" <robin.clark@oss.qualcomm.com>,
"Rob Herring" <robh@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
rust-for-linux@vger.kernel.org
Subject: Re: [PATCH 2/2] panthor: use drm_gem_object.gpuva.lock instead of gpuva_list_lock
Date: Thu, 21 Aug 2025 16:05:45 +0200 [thread overview]
Message-ID: <20250821160545.70ca8d02@fedora> (raw)
In-Reply-To: <20250814-gpuva-mutex-in-gem-v1-2-e202cbfe6d77@google.com>
On Thu, 14 Aug 2025 13:53:15 +0000
Alice Ryhl <aliceryhl@google.com> wrote:
> Now that drm_gem_object has a dedicated mutex for the gpuva list that is
> intended to be used in cases that must be fence signalling safe, use it
> in Panthor.
>
> Signed-off-by: Alice Ryhl <aliceryhl@google.com>
> ---
> drivers/gpu/drm/panthor/panthor_gem.c | 4 +---
> drivers/gpu/drm/panthor/panthor_gem.h | 12 ------------
> drivers/gpu/drm/panthor/panthor_mmu.c | 16 ++++++++--------
> 3 files changed, 9 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
> index a123bc740ba1460f96882206f598b148b64dc5f6..c654a3377903cf7e067becdb481fb14895a4eaa5 100644
> --- a/drivers/gpu/drm/panthor/panthor_gem.c
> +++ b/drivers/gpu/drm/panthor/panthor_gem.c
> @@ -74,7 +74,6 @@ static void panthor_gem_free_object(struct drm_gem_object *obj)
> mutex_destroy(&bo->label.lock);
>
> drm_gem_free_mmap_offset(&bo->base.base);
> - mutex_destroy(&bo->gpuva_list_lock);
> drm_gem_shmem_free(&bo->base);
> drm_gem_object_put(vm_root_gem);
> }
> @@ -246,8 +245,7 @@ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t
>
> obj->base.base.funcs = &panthor_gem_funcs;
> obj->base.map_wc = !ptdev->coherent;
> - mutex_init(&obj->gpuva_list_lock);
> - drm_gem_gpuva_set_lock(&obj->base.base, &obj->gpuva_list_lock);
> + drm_gem_gpuva_set_lock(&obj->base.base, &obj->base.base.gpuva.lock);
I guess this will go away in the previous patch in you follow Danilo's
advice to get rid of drm_gem_gpuva_set_lock(). The rest looks good to
me, so feel free to add
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
on the next version.
> mutex_init(&obj->label.lock);
>
> panthor_gem_debugfs_bo_init(obj);
> diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
> index 8fc7215e9b900ed162e03aebeae999fda00eeb7a..80c6e24112d0bd0f1561ae4d2224842afb735a59 100644
> --- a/drivers/gpu/drm/panthor/panthor_gem.h
> +++ b/drivers/gpu/drm/panthor/panthor_gem.h
> @@ -79,18 +79,6 @@ struct panthor_gem_object {
> */
> struct drm_gem_object *exclusive_vm_root_gem;
>
> - /**
> - * @gpuva_list_lock: Custom GPUVA lock.
> - *
> - * Used to protect insertion of drm_gpuva elements to the
> - * drm_gem_object.gpuva.list list.
> - *
> - * We can't use the GEM resv for that, because drm_gpuva_link() is
> - * called in a dma-signaling path, where we're not allowed to take
> - * resv locks.
> - */
> - struct mutex gpuva_list_lock;
> -
> /** @flags: Combination of drm_panthor_bo_flags flags. */
> u32 flags;
>
> diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c
> index 4140f697ba5af5769492d3bbb378e18aec8ade98..49ca416c7c2c5a01ab0513029697ba9c7a35832d 100644
> --- a/drivers/gpu/drm/panthor/panthor_mmu.c
> +++ b/drivers/gpu/drm/panthor/panthor_mmu.c
> @@ -1074,9 +1074,9 @@ static void panthor_vm_bo_put(struct drm_gpuvm_bo *vm_bo)
> * GEM vm_bo list.
> */
> dma_resv_lock(drm_gpuvm_resv(vm), NULL);
> - mutex_lock(&bo->gpuva_list_lock);
> + mutex_lock(&bo->base.base.gpuva.lock);
> unpin = drm_gpuvm_bo_put(vm_bo);
> - mutex_unlock(&bo->gpuva_list_lock);
> + mutex_unlock(&bo->base.base.gpuva.lock);
> dma_resv_unlock(drm_gpuvm_resv(vm));
>
> /* If the vm_bo object was destroyed, release the pin reference that
> @@ -1249,9 +1249,9 @@ static int panthor_vm_prepare_map_op_ctx(struct panthor_vm_op_ctx *op_ctx,
> * calling this function.
> */
> dma_resv_lock(panthor_vm_resv(vm), NULL);
> - mutex_lock(&bo->gpuva_list_lock);
> + mutex_lock(&bo->base.base.gpuva.lock);
> op_ctx->map.vm_bo = drm_gpuvm_bo_obtain_prealloc(preallocated_vm_bo);
> - mutex_unlock(&bo->gpuva_list_lock);
> + mutex_unlock(&bo->base.base.gpuva.lock);
> dma_resv_unlock(panthor_vm_resv(vm));
>
> /* If the a vm_bo for this <VM,BO> combination exists, it already
> @@ -2003,10 +2003,10 @@ static void panthor_vma_link(struct panthor_vm *vm,
> {
> struct panthor_gem_object *bo = to_panthor_bo(vma->base.gem.obj);
>
> - mutex_lock(&bo->gpuva_list_lock);
> + mutex_lock(&bo->base.base.gpuva.lock);
> drm_gpuva_link(&vma->base, vm_bo);
> drm_WARN_ON(&vm->ptdev->base, drm_gpuvm_bo_put(vm_bo));
> - mutex_unlock(&bo->gpuva_list_lock);
> + mutex_unlock(&bo->base.base.gpuva.lock);
> }
>
> static void panthor_vma_unlink(struct panthor_vm *vm,
> @@ -2015,9 +2015,9 @@ static void panthor_vma_unlink(struct panthor_vm *vm,
> struct panthor_gem_object *bo = to_panthor_bo(vma->base.gem.obj);
> struct drm_gpuvm_bo *vm_bo = drm_gpuvm_bo_get(vma->base.vm_bo);
>
> - mutex_lock(&bo->gpuva_list_lock);
> + mutex_lock(&bo->base.base.gpuva.lock);
> drm_gpuva_unlink(&vma->base);
> - mutex_unlock(&bo->gpuva_list_lock);
> + mutex_unlock(&bo->base.base.gpuva.lock);
>
> /* drm_gpuva_unlink() release the vm_bo, but we manually retained it
> * when entering this function, so we can implement deferred VMA
>
prev parent reply other threads:[~2025-08-21 14:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-14 13:53 [PATCH 0/2] Add mutex to drm_gem_object.gpuva list Alice Ryhl
2025-08-14 13:53 ` [PATCH 1/2] drm_gem: add mutex to drm_gem_object.gpuva Alice Ryhl
2025-08-14 14:59 ` Danilo Krummrich
2025-08-14 15:01 ` Alice Ryhl
2025-08-14 15:18 ` Danilo Krummrich
2025-08-14 13:53 ` [PATCH 2/2] panthor: use drm_gem_object.gpuva.lock instead of gpuva_list_lock Alice Ryhl
2025-08-21 14:05 ` Boris Brezillon [this message]
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=20250821160545.70ca8d02@fedora \
--to=boris.brezillon@collabora.com \
--cc=a.hindborg@kernel.org \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=liviu.dudau@arm.com \
--cc=lossin@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=ojeda@kernel.org \
--cc=robh@kernel.org \
--cc=robin.clark@oss.qualcomm.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=tmgross@umich.edu \
--cc=tzimmermann@suse.de \
/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.