From: Thorsten Leemhuis <linux@leemhuis.info>
To: Alex Deucher <alexander.deucher@amd.com>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
Felix.Kuehling@amd.com
Cc: "Mukul Joshi" <mukul.joshi@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"Mark Brown" <broonie@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
rust-for-linux@vger.kernel.org,
"Linux Next Mailing List" <linux-next@vger.kernel.org>
Subject: Re: [PATCH 1/3] drm/gem: Add callback for when handle count goes to 0
Date: Sat, 5 Sep 2026 07:36:59 +0200 [thread overview]
Message-ID: <aaef18cd-ab55-4fb8-8563-ca3a5ea9cbc6@leemhuis.info> (raw)
In-Reply-To: <20260831183311.1090131-2-alexander.deucher@amd.com>
On 8/31/26 20:33, Alex Deucher wrote:
> From: Mukul Joshi <mukul.joshi@amd.com>
>
> Add an optional callback for driver-specific cleanup when the GEM
> handle of an object is freed. This will be used by AMDGPU to enable
> freeing of memory exported to other nodes in a UALink pod once all
> user mode references are gone.
>
> The callback is called outside the object_name_lock and before
> releasing the reference count on the GEM object
This showed up in -next yesterday and afaics broke build on arm64 and
x86_64 for me with the following error from rust:
"""
>> error[E0063]: missing field `handle_free` in initializer of `drm_gem_object_funcs`
>> --> rust/kernel/drm/gem/mod.rs:265:58
>> |
>> 265 | const OBJECT_FUNCS: bindings::drm_gem_object_funcs = bindings::drm_gem_object_funcs {
>> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `handle_free`
>>
>> error: aborting due to 1 previous error
>>
>> For more information about this error, try `rustc --explain E0063`.
>> make[2]: *** [rust/Makefile:799: rust/kernel.o] Error 1
>> make[1]: *** [/builddir/build/BUILD/kernel-7.3.0-build/kernel-next-20260904/linux-7.3.0-0.0.next.20260904.221.vanilla.fc43.aarch64/Makefile:1442: prepare] Error 2
>> make: *** [Makefile:256: __sub-make] Error 2
"""
Full log:
https://download.copr.fedorainfracloud.org/results/@kernel-vanilla/next/fedora-43-aarch64/10951622-next-next-all/builder-live.log.gz
Reverting this change and 2/3 from this set fixed the problem for me.
Ciao, Thorsten
> Suggested-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 9 +++++++++
> drivers/gpu/drm/drm_gem.c | 5 ++++-
> include/drm/drm_gem.h | 11 +++++++++++
> 3 files changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index f754a4a3a1c22..0d579517c03ce 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -386,6 +386,14 @@ static int amdgpu_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_str
> return drm_gem_ttm_mmap(obj, vma);
> }
>
> +static void amdgpu_gem_object_handle_free(struct drm_gem_object *gobj)
> +{
> + struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);
> +
> + amdgpu_ualink_revoke_exported_memory(aobj);
> +
> +}
> +
> const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
> .free = amdgpu_gem_object_free,
> .open = amdgpu_gem_object_open,
> @@ -395,6 +403,7 @@ const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
> .vunmap = drm_gem_ttm_vunmap,
> .mmap = amdgpu_gem_object_mmap,
> .vm_ops = &amdgpu_gem_vm_ops,
> + .handle_free = amdgpu_gem_object_handle_free
> };
>
> static bool amdgpu_gem_are_domains_valid(u32 domains)
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index e3ed684ddcf29..6a86bd2a0343e 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -354,8 +354,11 @@ void drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj)
> }
> mutex_unlock(&dev->object_name_lock);
>
> - if (final)
> + if (final) {
> + if (obj->funcs->handle_free)
> + obj->funcs->handle_free(obj);
> drm_gem_object_put(obj);
> + }
> }
>
> /*
> diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
> index 8a704f6a65c15..95d8ae6f85df7 100644
> --- a/include/drm/drm_gem.h
> +++ b/include/drm/drm_gem.h
> @@ -227,6 +227,17 @@ struct drm_gem_object_funcs {
> */
> size_t (*rss)(struct drm_gem_object *obj);
>
> + /**
> + * @handle_free:
> + *
> + * This callback is called when the GEM handle count goes down to 0.
> + * It is currently used by AMDGPU driver to release their exported BO
> + * handles.
> + *
> + * This callback is optional.
> + */
> + void (*handle_free)(struct drm_gem_object *obj);
> +
> /**
> * @vm_ops:
> *
next parent reply other threads:[~2026-09-05 5:37 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260831183311.1090131-1-alexander.deucher@amd.com>
[not found] ` <20260831183311.1090131-2-alexander.deucher@amd.com>
2026-09-05 5:36 ` Thorsten Leemhuis [this message]
2026-09-05 9:31 ` [PATCH 1/3] drm/gem: Add callback for when handle count goes to 0 Manuel Ebner
2026-09-05 22:25 ` Klara Modin
2026-09-05 23:41 ` Gary Guo
2026-09-08 4:33 ` Thorsten Leemhuis
2026-09-08 16:03 ` Alex Deucher
2026-09-08 17:57 ` Klara Modin
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=aaef18cd-ab55-4fb8-8563-ca3a5ea9cbc6@leemhuis.info \
--to=linux@leemhuis.info \
--cc=Felix.Kuehling@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=broonie@kernel.org \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-next@vger.kernel.org \
--cc=mukul.joshi@amd.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
/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