From: Boris Brezillon <boris.brezillon@collabora.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: "Dmitry Osipenko" <dmitry.osipenko@collabora.com>,
"David Airlie" <airlied@gmail.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Gurchetan Singh" <gurchetansingh@chromium.org>,
"Chia-I Wu" <olvaffe@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Christian König" <christian.koenig@amd.com>,
"Qiang Yu" <yuq825@gmail.com>,
"Steven Price" <steven.price@arm.com>,
"Emma Anholt" <emma@anholt.net>, "Melissa Wen" <mwen@igalia.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
kernel@collabora.com, virtualization@lists.linux-foundation.org
Subject: Re: [PATCH v18 04/26] drm/shmem-helper: Refactor locked/unlocked functions
Date: Wed, 29 Nov 2023 16:47:05 +0100 [thread overview]
Message-ID: <20231129164705.7461a294@collabora.com> (raw)
In-Reply-To: <6da6mzwfzwbn5rhiebypo5e2v6rhtpn2fovwvfnoo333zjgobf@bgtuwhum3trp>
On Wed, 29 Nov 2023 16:15:27 +0100
Maxime Ripard <mripard@kernel.org> wrote:
> > Now, let's assume we drop the _locked() suffix on
> > drm_gem_shmem_v[un]map(), but keep it on other helpers that need both
> > variants. This results in an inconsistent naming scheme inside the
> > same source file, which I find utterly confusing.
> >
> > Note that the initial reason I asked Dmitry if he could add the
> > _locked suffix to drm_gem_shmem_vmap() is because I started using
> > drm_gem_shmem_vmap() in powervr, before realizing this version wasn't
> > taking the lock, and I should have used drm_gem_vmap_unlocked()
> > instead, so this is not something I'm making up.
>
> Sorry if I gave you the impression I thought that you're making that up,
> I'm not.
>
> Thanks for the explanation btw, I think I get what you're saying now:
>
> - drm_gem_shmem_vmap() is never taking the locks because the core
> expects to take them before calling them.
>
> - drm_gem_shmem_vunmap() is never taking the locks because the core
> expects to take them before calling them.
Correct.
>
> - Some other code path can still call those helpers in drivers, and the
> locking isn't handled by the core anymore.
They can, if they want to v[un]map a BO and they already acquired the
GEM resv lock. But I'm not sure anyone needs to do that yet. The main
reason for exposing these helpers is if one driver needs to overload the
default gem_shmem_funcs.
>
> - We now have _vmap/vunmap_unlocked functions to take those locks for
> those code paths
We don't have drm_gem_shmem_vmap/vunmap_unlocked(), we have
drm_gem_shmem_vmap/vunmap_locked(), which can be called directly, but
are mainly used to populate the drm_gem_object_funcs vtable. If drivers
want to v[un]map in a path where the resv lock is not held, they should
call drm_gem_vmap/vunmap_unlocked() (which are renamed
drm_gem_vmap/vunmap() in patch 1 of this series). Mind the **drm_gem_**
vs **drm_gem_shmem_** difference in the helper names. drm_gem_ helpers
are provided by drm_gem.c and call drm_gem_object_funcs callback, which
are supposed to be populated with drm_gem_shmem helpers.
>
> - And the variant names are now confusing, making people use the
> lockless version in situations where they should have use the locked
> one.
That's what happened to me, at least.
>
> Is that a correct summary?
Almost ;-).
>
> If so, then I agree that we need to change the name.
Cool.
>
> We discussed it some more on IRC, and we agree that the "default"
> function should handle the locking properly and that's what the most
> common case should use.
Agree if by 'default' you mean the lock is always acquired by the
helper, not 'let's decide based on what users do most of the time with
this specific helper', because otherwise we'd be back to a situation
where the name doesn't clearly encode the function behavior.
>
> So that means than drm_gem_shmem_vmap/vunmap() should take the lock
> itself, and drm_gem_shmem_vmap/vunmap_nolock/unlocked never does.
Not sure we have a need for drm_gem_shmem_vmap/vunmap(), but if we ever
add such helpers, they would acquire the resv lock, indeed.
Just to be clear, _nolock == _locked in the current semantics :-).
_nolock means 'don't take the lock', and _locked means 'lock is already
held'.
>
> I think I'd prefer the nolock variant over unlocked still.
Okay, that means s/_locked/_nolock/ in drm_gem_shmem_helpers.{c,h}, I
guess.
>
> And I also think we can improve the documentation and add lockdep calls
Lockdep asserts are already there, I think.
> to make sure that the difference between variants is clear in the doc,
> and if someone still get confused we can catch it.
>
> Does that sound like a plan?
Assuming I understood it correctly, yes. Can you just confirm my
understanding is correct though?
Regards,
Boris
next prev parent reply other threads:[~2023-11-29 15:47 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20231029230205.93277-1-dmitry.osipenko@collabora.com>
[not found] ` <20231029230205.93277-26-dmitry.osipenko@collabora.com>
2023-11-03 22:55 ` [PATCH v18 25/26] drm/virtio: Support shmem shrinking Gurchetan Singh
[not found] ` <20231029230205.93277-12-dmitry.osipenko@collabora.com>
2023-11-10 10:16 ` [PATCH v18 11/26] drm/shmem-helper: Prepare drm_gem_shmem_free() to shrinker addition Boris Brezillon
2023-11-20 11:02 ` Dmitry Osipenko
2023-11-20 11:19 ` Boris Brezillon
2023-11-20 11:38 ` Dmitry Osipenko
[not found] ` <20231029230205.93277-13-dmitry.osipenko@collabora.com>
2023-11-10 10:17 ` [PATCH v18 12/26] drm/shmem-helper: Make drm_gem_shmem_get_pages() public Boris Brezillon
[not found] ` <20231029230205.93277-15-dmitry.osipenko@collabora.com>
2023-11-10 10:30 ` [PATCH v18 14/26] drm/lima: Explicitly get and put drm-shmem pages Boris Brezillon
[not found] ` <20231029230205.93277-17-dmitry.osipenko@collabora.com>
2023-11-10 10:59 ` [PATCH v18 16/26] drm/virtio: " Boris Brezillon
[not found] ` <20231029230205.93277-18-dmitry.osipenko@collabora.com>
2023-11-10 11:01 ` [PATCH v18 17/26] drm/v3d: " Boris Brezillon
[not found] ` <20231029230205.93277-19-dmitry.osipenko@collabora.com>
2023-11-10 11:15 ` [PATCH v18 18/26] drm/shmem-helper: Change sgt allocation policy Boris Brezillon
[not found] ` <20231029230205.93277-20-dmitry.osipenko@collabora.com>
2023-11-10 14:58 ` [PATCH v18 19/26] drm/shmem-helper: Add common memory shrinker Boris Brezillon
2023-11-13 9:35 ` Boris Brezillon
[not found] ` <20231029230205.93277-22-dmitry.osipenko@collabora.com>
2023-11-13 9:49 ` [PATCH v18 21/26] drm/shmem-helper: Optimize unlocked get_pages_sgt() Boris Brezillon
[not found] ` <20231029230205.93277-23-dmitry.osipenko@collabora.com>
2023-11-13 9:54 ` [PATCH v18 22/26] drm/shmem-helper: Don't free refcounted GEM Boris Brezillon
2023-11-22 22:30 ` Dmitry Osipenko
2023-11-23 9:08 ` Boris Brezillon
2023-11-23 12:36 ` Dmitry Osipenko
[not found] ` <20231029230205.93277-25-dmitry.osipenko@collabora.com>
2023-11-13 9:57 ` [PATCH v18 24/26] drm/virtio: Attach shmem BOs dynamically Boris Brezillon
2023-11-22 22:37 ` Dmitry Osipenko
2023-11-22 22:41 ` Dmitry Osipenko
[not found] ` <20231029230205.93277-16-dmitry.osipenko@collabora.com>
2023-11-10 10:53 ` [PATCH v18 15/26] drm/panfrost: Explicitly get and put drm-shmem pages Boris Brezillon
2023-11-22 22:04 ` Dmitry Osipenko
2023-11-23 9:05 ` Boris Brezillon
2023-11-23 12:24 ` Dmitry Osipenko
2023-11-23 14:33 ` Boris Brezillon
2023-11-23 14:48 ` Boris Brezillon
2023-11-24 9:40 ` Boris Brezillon
[not found] ` <20231029230205.93277-27-dmitry.osipenko@collabora.com>
2023-11-24 10:04 ` [PATCH v18 26/26] drm/panfrost: Switch to generic memory shrinker Boris Brezillon
[not found] ` <20231029230205.93277-5-dmitry.osipenko@collabora.com>
2023-11-24 10:40 ` [PATCH v18 04/26] drm/shmem-helper: Refactor locked/unlocked functions Maxime Ripard
2023-11-24 10:44 ` Boris Brezillon
2023-11-24 10:59 ` Boris Brezillon
2023-11-28 11:14 ` Maxime Ripard
2023-11-28 12:37 ` Boris Brezillon
2023-11-28 22:05 ` Dmitry Osipenko
2023-11-29 7:53 ` Boris Brezillon
2023-11-29 10:47 ` Dmitry Osipenko
2023-11-29 10:57 ` Boris Brezillon
2023-11-29 13:09 ` Maxime Ripard
2023-11-29 13:46 ` Boris Brezillon
2023-11-29 15:15 ` Maxime Ripard
2023-11-29 15:47 ` Boris Brezillon [this message]
2023-12-04 12:55 ` Maxime Ripard
2023-12-05 11:43 ` Dmitry Osipenko
2023-12-14 18:16 ` Maxime Ripard
2023-12-15 0:42 ` Dmitry Osipenko
[not found] ` <20231029230205.93277-6-dmitry.osipenko@collabora.com>
2023-11-10 10:08 ` [PATCH v18 05/26] drm/shmem-helper: Remove obsoleted is_iomem test Boris Brezillon
2023-11-24 10:40 ` Maxime Ripard
[not found] ` <20231029230205.93277-9-dmitry.osipenko@collabora.com>
2023-11-24 10:47 ` [PATCH v18 08/26] drm/shmem-helper: Add and use lockless drm_gem_shmem_get_pages() Maxime Ripard
2023-11-24 11:20 ` Boris Brezillon
[not found] ` <20231029230205.93277-10-dmitry.osipenko@collabora.com>
2023-11-24 10:48 ` [PATCH v18 09/26] drm/shmem-helper: Switch drm_gem_shmem_vmap/vunmap to use pin/unpin Maxime Ripard
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=20231129164705.7461a294@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=airlied@gmail.com \
--cc=christian.koenig@amd.com \
--cc=daniel@ffwll.ch \
--cc=dmitry.osipenko@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=emma@anholt.net \
--cc=gurchetansingh@chromium.org \
--cc=kernel@collabora.com \
--cc=kraxel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=mwen@igalia.com \
--cc=olvaffe@gmail.com \
--cc=steven.price@arm.com \
--cc=tzimmermann@suse.de \
--cc=virtualization@lists.linux-foundation.org \
--cc=yuq825@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).