From: Daniel Vetter <daniel.vetter@ffwll.ch>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
Cc: dri-devel@lists.freedesktop.org, Daniel Vetter <daniel@ffwll.ch>,
linaro-mm-sig@lists.linaro.org, intel-gfx@lists.freedesktop.org,
Christian Koenig <christian.koenig@amd.com>,
intel-xe@lists.freedesktop.org
Subject: Re: [RFC PATCH] dma-buf/dma-fence: Use a successful read_trylock() annotation for dma_fence_begin_signalling()
Date: Wed, 14 Aug 2024 09:10:44 +0200 [thread overview]
Message-ID: <ZrxYdIDdEJXRTFrn@phenom.ffwll.local> (raw)
In-Reply-To: <be9b192a-a125-6774-bb4f-8b9fb517ce0d@linux.intel.com>
On Fri, May 26, 2023 at 01:11:28PM +0200, Thomas Hellström wrote:
> Daniel,
>
> On 4/28/23 14:52, Thomas Hellström wrote:
> > Condsider the following call sequence:
> >
> > /* Upper layer */
> > dma_fence_begin_signalling();
> > lock(tainted_shared_lock);
> > /* Driver callback */
> > dma_fence_begin_signalling();
> > ...
> >
> > The driver might here use a utility that is annotated as intended for the
> > dma-fence signalling critical path. Now if the upper layer isn't correctly
> > annotated yet for whatever reason, resulting in
> >
> > /* Upper layer */
> > lock(tainted_shared_lock);
> > /* Driver callback */
> > dma_fence_begin_signalling();
> >
> > We will receive a false lockdep locking order violation notification from
> > dma_fence_begin_signalling(). However entering a dma-fence signalling
> > critical section itself doesn't block and could not cause a deadlock.
> >
> > So use a successful read_trylock() annotation instead for
> > dma_fence_begin_signalling(). That will make sure that the locking order
> > is correctly registered in the first case, and doesn't register any
> > locking order in the second case.
> >
> > The alternative is of course to make sure that the "Upper layer" is always
> > correctly annotated. But experience shows that's not easily achievable
> > in all cases.
> >
> > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>
> Resurrecting the discussion on this one. I can't see a situation where we
> would miss *relevant* locking
> order violation warnings with this patch. Ofc if we have a scheduler
> annotation patch that would work fine as well, but the lack of annotation in
> the scheduler callbacks is really starting to hurt us.
Yeah this is just a bit too brain-melting to review, but I concur now.
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
I think what would help is some lockdep selftests to check that we both
catch the stuff we want to, and don't incur false positives. Maybe with a
plea that lockdep should have some native form of cross-release
annotations ...
But definitely seperate patch set, since it might take a few rounds of
review by lockdep folks.
-Sima
>
> Thanks,
>
> Thomas
>
>
>
> > ---
> > drivers/dma-buf/dma-fence.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> > index f177c56269bb..17f632768ef9 100644
> > --- a/drivers/dma-buf/dma-fence.c
> > +++ b/drivers/dma-buf/dma-fence.c
> > @@ -308,8 +308,8 @@ bool dma_fence_begin_signalling(void)
> > if (in_atomic())
> > return true;
> > - /* ... and non-recursive readlock */
> > - lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _RET_IP_);
> > + /* ... and non-recursive successful read_trylock */
> > + lock_acquire(&dma_fence_lockdep_map, 0, 1, 1, 1, NULL, _RET_IP_);
> > return false;
> > }
> > @@ -340,7 +340,7 @@ void __dma_fence_might_wait(void)
> > lock_map_acquire(&dma_fence_lockdep_map);
> > lock_map_release(&dma_fence_lockdep_map);
> > if (tmp)
> > - lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _THIS_IP_);
> > + lock_acquire(&dma_fence_lockdep_map, 0, 1, 1, 1, NULL, _THIS_IP_);
> > }
> > #endif
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
next prev parent reply other threads:[~2024-08-14 7:10 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-28 12:52 [Intel-gfx] [RFC PATCH] dma-buf/dma-fence: Use a successful read_trylock() annotation for dma_fence_begin_signalling() Thomas Hellström
2023-04-28 12:52 ` Thomas Hellström
2023-04-28 12:52 ` [Intel-xe] " Thomas Hellström
2023-04-28 12:56 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
2023-04-28 12:57 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-04-28 13:01 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-04-28 13:03 ` [Intel-gfx] [RFC PATCH] " Thomas Hellström
2023-04-28 13:03 ` Thomas Hellström
2023-04-28 13:03 ` [Intel-xe] " Thomas Hellström
2023-04-28 13:25 ` [Intel-xe] ○ CI.BAT: info for " Patchwork
2023-04-28 17:55 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-04-29 2:50 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2023-05-26 11:11 ` [Intel-gfx] [RFC PATCH] " Thomas Hellström
2023-05-26 11:11 ` Thomas Hellström
2023-05-26 11:11 ` [Intel-xe] " Thomas Hellström
2024-08-14 7:10 ` Daniel Vetter [this message]
2024-08-14 8:37 ` Thomas Hellström
2024-09-18 12:34 ` RESEND " Thomas Hellström
2024-09-18 13:18 ` Christian König
2024-09-20 7:46 ` Thomas Hellström
2024-09-19 9:16 ` ✓ CI.Patch_applied: success for dma-buf/dma-fence: Use a successful read_trylock() annotation for dma_fence_begin_signalling() (rev2) Patchwork
2024-09-19 9:17 ` ✓ CI.checkpatch: " Patchwork
2024-09-19 9:18 ` ✓ CI.KUnit: " Patchwork
2024-09-19 9:29 ` ✓ CI.Build: " Patchwork
2024-09-19 9:32 ` ✓ CI.Hooks: " Patchwork
2024-09-19 9:33 ` ✓ CI.checksparse: " Patchwork
2024-09-19 9:52 ` ✓ CI.BAT: " Patchwork
2024-09-19 18:35 ` ✗ CI.FULL: failure " Patchwork
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=ZrxYdIDdEJXRTFrn@phenom.ffwll.local \
--to=daniel.vetter@ffwll.ch \
--cc=christian.koenig@amd.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=linaro-mm-sig@lists.linaro.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.