All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <christian.koenig@amd.com>
To: Matthew Brost <matthew.brost@intel.com>,
	Danilo Krummrich <dakr@kernel.org>
Cc: thomas.hellstrom@linux.intel.com, ecourtney@nvidia.com,
	simona@ffwll.ch, nat@pixelcluster.dev, airlied@gmail.com,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH 01/12] dma-buf: Add reference counting to dma_resv
Date: Mon, 13 Jul 2026 11:25:43 +0200	[thread overview]
Message-ID: <aff7eb27-22c1-4e84-91ab-627c2604e488@amd.com> (raw)
In-Reply-To: <alPwTypl8Y8PN7hz@gsse-cloud1.jf.intel.com>

On 7/12/26 21:51, Matthew Brost wrote:
> On Sat, Jul 11, 2026 at 03:10:58PM +0200, Danilo Krummrich wrote:
>> On Sat Jul 11, 2026 at 3:27 AM CEST, Matthew Brost wrote:
>>> On Fri, Jul 10, 2026 at 08:52:41PM +0200, Christian König wrote:
>>>> This provides clearer ownership semantics and makes the code more
>>>> maintainable by removing the embedded allocation hack.
>>>>
>>>
>>> This looks a lot better to me. In particular, I agree with the last
>>> sentence in the commit message.
>>
>> I have to disagree with this, it is the opposite. As long as the struct
> 
> Daniilo is of course correct here, completely missed this when I looked.
> 
>> dma_resv::allocated fields and the corresponding semantics exists, this does
>> result into less clear ownership semantics.
>>
>> When the dma_resv is embedded in another object the reference count becomes
>> meaningless. If the object embedding the dma_resv is freed it doesn't matter
>> whether I have a reference count, it would a UAF regardless.
>>
> 
> Yes, I agree. The allocated field would need to be dropped to make this
> viable, and we would disallow embedding a dma-resv object into other
> objects (which I believe is the suggestion).

Yeah completely agree as well. This was basically just the first hacky version.

> This doesn't look too painful, as I can only find two instances of
> embedding in the kernel: drm_gem_object and i915_address_space and
> handful of stack variables.

The use case in the TTM BO deletion path is the only really ugly one as far as I can see.

It uses the drm_gem_object embedded reservation object to make sure memory allocation can't fail during deletion.

We need something like a dummy delete_resv allocated for each TTM BO during creation or something like that to avoid this.

But that in turn means potentially means taking a look at all TTM using drivers if/when they use this in their deletion path.

Doable but a bit more work. Probably also a good job for AI.

Question is also who is taking that work? @Natalie can you pick up from here?

Regards,
Christian.

> 
> Matt
> 
>> It is misleading (and hence error prone) to have an API where one can obtain a
>> reference count of an object where the underlying memory can be freed regardless
>> of the obtained reference count.
>>
>> A refernece count represents a shared ownership model, which is undermined if
>> the underlying memory is not owned by the reference count.
>>
>> That said, I don't mind the reference count, but we can't mix up exclusive
>> ownership (embedding a structure) and shared ownership (reference count).
>>
>>>> +static void dma_resv_release(struct kref *kref)
>>>>  {
>>>> -	/*
>>>> -	 * This object should be dead and all references must have
>>>> -	 * been released to it, so no need to be protected with rcu.
>>>> -	 */
>>>> +	struct dma_resv *obj = container_of(kref, struct dma_resv, refcount);
>>>> +
>>>>  	dma_resv_list_free(rcu_dereference_protected(obj->fences, true));
>>>>  	ww_mutex_destroy(&obj->lock);
>>>> +	if (obj->allocated)
>>>> +		kfree(obj);
>>>> +}


  reply	other threads:[~2026-07-13  9:26 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-10 18:52 Refcounting dma_resv and using that for drm_exec support in TTM Christian König
2026-07-10 18:52 ` [PATCH 01/12] dma-buf: Add reference counting to dma_resv Christian König
2026-07-11  1:27   ` Matthew Brost
2026-07-11 13:10     ` Danilo Krummrich
2026-07-12 19:51       ` Matthew Brost
2026-07-13  9:25         ` Christian König [this message]
2026-07-13 14:57           ` Matthew Brost
2026-07-10 18:52 ` [PATCH 02/12] dma-buf/tests: Convert st-dma-resv tests to use dma_resv_alloc Christian König
2026-07-10 18:52 ` [PATCH 03/12] drm/gem: Add helper for drm_gem_object resv assignment Christian König
2026-07-10 18:52 ` [PATCH 04/12] drm/ttm: Switch LRU cursor to track dma_resv instead of buffer objects Christian König
2026-07-13 13:40   ` Thomas Hellström
2026-07-13 15:15     ` Matthew Brost
2026-07-10 18:52 ` [PATCH 05/12] drm/ttm: switch to ttm_bo_lru_for_each_reserved_guarded for swapout Christian König
2026-07-10 18:52 ` [PATCH 06/12] drm/ttm: move delete handling into ttm_bo_evict Christian König
2026-07-10 18:52 ` [PATCH 07/12] drm/ttm: use ttm_bo_lru_for_each_reserved_guarded in evict_all Christian König
2026-07-10 18:52 ` [PATCH 08/12] drm/ttm: use dma_resv reference in ttm_device_clear_lru_dma_mappings Christian König
2026-07-10 18:52 ` [PATCH 09/12] drm/ttm: nuke buffer refcounting Christian König
2026-07-11 13:26   ` Danilo Krummrich
2026-07-13 15:06     ` Matthew Brost
2026-07-10 18:52 ` [PATCH 10/12] drm/exec: add drm_exec_lock_resv function Christian König
2026-07-13 11:57   ` Thomas Hellström
2026-07-13 12:07     ` Christian König
2026-07-13 12:19       ` Thomas Hellström
2026-07-13 13:14         ` Christian König
2026-07-13 13:37           ` Thomas Hellström
2026-07-10 18:52 ` [PATCH 11/12] drm/ttm: support using drm_exec during eviction v4 Christian König
2026-07-13 11:59   ` Thomas Hellström
2026-07-10 18:52 ` [PATCH 12/12] drm/amdgpu: use drm_exec during BO validation Christian König
2026-07-10 19:40 ` ✗ Fi.CI.BUILD: failure for series starting with [01/12] dma-buf: Add reference counting to dma_resv Patchwork
2026-07-13 11:32 ` Refcounting dma_resv and using that for drm_exec support in TTM Thomas Hellström
2026-07-13 15:03   ` Matthew Brost

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=aff7eb27-22c1-4e84-91ab-627c2604e488@amd.com \
    --to=christian.koenig@amd.com \
    --cc=airlied@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=ecourtney@nvidia.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.brost@intel.com \
    --cc=nat@pixelcluster.dev \
    --cc=simona@ffwll.ch \
    --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.