From: Boris Brezillon <boris.brezillon@collabora.com>
To: Maxime Ripard <mripard@kernel.org>
Cc: Steven Price <steven.price@arm.com>,
dri-devel@lists.freedesktop.org,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Faith Ekstrand <faith.ekstrand@collabora.com>,
kernel@collabora.com
Subject: Re: [PATCH v4 02/14] drm/gem: Add a drm_gem_object_funcs::sync() and a drm_gem_sync() helper
Date: Thu, 16 Oct 2025 15:07:04 +0200 [thread overview]
Message-ID: <20251016150704.405524b9@fedora> (raw)
In-Reply-To: <20251016145708.5721c43a@fedora>
On Thu, 16 Oct 2025 14:57:08 +0200
Boris Brezillon <boris.brezillon@collabora.com> wrote:
> On Thu, 16 Oct 2025 10:13:25 +0200
> Maxime Ripard <mripard@kernel.org> wrote:
>
> > Hi,
> >
> > On Wed, Oct 15, 2025 at 06:03:14PM +0200, Boris Brezillon wrote:
> > > Prepare things for standardizing synchronization around CPU accesses
> > > of GEM buffers. This will be used to provide default
> > > drm_gem_dmabuf_{begin,end}_cpu_access() implementations, and provide
> > > a way for drivers to add their own ioctls to synchronize CPU
> > > writes/reads when they can't do it directly from userland.
> > >
> > > v2:
> > > - New commit
> > >
> > > v3:
> > > - No changes
> > >
> > > v4:
> > > - Add Steve's R-b
> > >
> > > Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
> > > Reviewed-by: Steven Price <steven.price@arm.com>
> > > ---
> > > drivers/gpu/drm/drm_gem.c | 10 +++++++++
> > > include/drm/drm_gem.h | 45 +++++++++++++++++++++++++++++++++++++++
> > > 2 files changed, 55 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> > > index a1a9c828938b..a1431e4f2404 100644
> > > --- a/drivers/gpu/drm/drm_gem.c
> > > +++ b/drivers/gpu/drm/drm_gem.c
> > > @@ -1333,6 +1333,16 @@ void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map)
> > > }
> > > EXPORT_SYMBOL(drm_gem_vunmap);
> > >
> > > +int drm_gem_sync(struct drm_gem_object *obj, size_t offset, size_t size,
> > > + enum drm_gem_object_access_flags access)
> > > +{
> > > + if (obj->funcs->sync)
> > > + return obj->funcs->sync(obj, offset, size, access);
> > > +
> > > + return 0;
> > > +}
> > > +EXPORT_SYMBOL(drm_gem_sync);
> > > +
> > > /**
> > > * drm_gem_lock_reservations - Sets up the ww context and acquires
> > > * the lock on an array of GEM objects.
> > > diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
> > > index 8d48d2af2649..1c33e59ab305 100644
> > > --- a/include/drm/drm_gem.h
> > > +++ b/include/drm/drm_gem.h
> > > @@ -66,6 +66,33 @@ enum drm_gem_object_status {
> > > DRM_GEM_OBJECT_ACTIVE = BIT(2),
> > > };
> > >
> > > +/**
> > > + * enum drm_gem_object_status - bitmask describing GEM access types to prepare for
> >
> > Treating an enum as a bitmask is a bit weird to me. I'd say either have
> > a bitmask with BIT(enum values), or no enum at all.
>
> I'll drop the enum and make it pure defines.
>
> >
> > > + */
> > > +enum drm_gem_object_access_flags {
> > > + /** @DRM_GEM_OBJECT_CPU_ACCESS: Prepare for a CPU access. */
> > > + DRM_GEM_OBJECT_CPU_ACCESS = 0,
> > > +
> > > + /** @DRM_GEM_OBJECT_DEV_ACCESS: Prepare for a device access. */
> > > + DRM_GEM_OBJECT_DEV_ACCESS = BIT(0),
> > > +
> > > + /** @DRM_GEM_OBJECT_ACCESSOR_MASK: Mask used to check the entity doing the access. */
> > > + DRM_GEM_OBJECT_ACCESSOR_MASK = BIT(0),
> >
> > Do we really want to have to variants with the same discriminant? If so,
> > we should document why it's something we want.
> >
> > > + /** @DRM_GEM_OBJECT_READ_ACCESS: Prepare for read-only accesses. */
> > > + DRM_GEM_OBJECT_READ_ACCESS = BIT(1),
> > > +
> > > + /** @DRM_GEM_OBJECT_WRITE_ACCESS: Prepare for write-only accesses. */
> > > + DRM_GEM_OBJECT_WRITE_ACCESS = BIT(2),
> > > +
> > > + /** @DRM_GEM_OBJECT_RW_ACCESS: Prepare for a read/write accesses. */
> > > + DRM_GEM_OBJECT_RW_ACCESS = DRM_GEM_OBJECT_READ_ACCESS |
> > > + DRM_GEM_OBJECT_WRITE_ACCESS,
> > > +
> > > + /** @DRM_GEM_OBJECT_ACCESS_TYPE_MASK: Mask used to check the access type. */
> > > + DRM_GEM_OBJECT_ACCESS_TYPE_MASK = DRM_GEM_OBJECT_RW_ACCESS,
> >
> > Same thing.
> >
> > Or is it that you encode both the direction and access type, and have a
> > mask to isolate each?
>
> This ^.
>
> >
> > If so, we should really move it out from an enum into defines, or treat each
> > separately like dma_sync_does.
>
> Sure, I can do that.
Actually, looking at the enum just above the one added in this patch
(drm_gem_object_status), it seems that it has the same flaws, and I
think it was the reason I went for this enum-based approach, because I
tend to be consistent with the code base I'm modifying.
Now, I get that defining flags with an enum and then composing those to
then pass the composition to some helper pretending it's still an enum
only works in C (because with C you can do anything you want :D), and
probably not if you're in pedantic mode. But if we want to enforce
that, we should probably fix the existing code base, otherwise this
will keep happening ;-). And no, before you ask, I'm not volunteering
for this :P.
next prev parent reply other threads:[~2025-10-16 13:07 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-15 16:03 [PATCH v4 00/14] drm/panfrost, panthor: Cached maps and explicit flushing Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 01/14] drm/panthor: Fix panthor_gpu_coherency_set() Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 02/14] drm/gem: Add a drm_gem_object_funcs::sync() and a drm_gem_sync() helper Boris Brezillon
2025-10-16 8:13 ` Maxime Ripard
2025-10-16 12:57 ` Boris Brezillon
2025-10-16 13:07 ` Boris Brezillon [this message]
2025-10-29 9:30 ` Maxime Ripard
2025-10-30 14:07 ` Boris Brezillon
2025-10-16 8:32 ` Thomas Zimmermann
2025-10-16 9:40 ` Boris Brezillon
2025-10-16 9:58 ` Thomas Zimmermann
2025-10-16 10:32 ` Boris Brezillon
2025-10-16 11:42 ` Thomas Zimmermann
2025-10-16 12:24 ` Boris Brezillon
2025-10-30 14:11 ` Boris Brezillon
2025-10-17 14:32 ` Faith Ekstrand
2025-10-17 14:40 ` Faith Ekstrand
2025-10-17 15:26 ` Boris Brezillon
2025-10-17 15:35 ` Faith Ekstrand
2025-10-17 15:50 ` Boris Brezillon
2025-10-17 15:57 ` Faith Ekstrand
2025-10-17 16:35 ` Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 03/14] drm/prime: Provide default ::{begin, end}_cpu_access() implementations Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 04/14] drm/shmem: Add a drm_gem_shmem_sync() helper Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 05/14] drm/panthor: Expose the selected coherency protocol to the UMD Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 06/14] drm/panthor: Add a PANTHOR_BO_SYNC ioctl Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 07/14] drm/panthor: Add an ioctl to query BO flags Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 08/14] drm/panthor: Add flag to map GEM object Write-Back Cacheable Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 09/14] drm/panthor: Bump the driver version to 1.6 Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 10/14] drm/panfrost: Expose the selected coherency protocol to the UMD Boris Brezillon
2025-10-15 16:06 ` Steven Price
2025-10-15 16:03 ` [PATCH v4 11/14] drm/panfrost: Add a PANFROST_SYNC_BO ioctl Boris Brezillon
2025-10-16 8:42 ` Marcin Ślusarz
2025-10-16 9:52 ` Boris Brezillon
2025-10-16 10:02 ` Marcin Ślusarz
2025-10-16 10:35 ` Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 12/14] drm/panfrost: Add an ioctl to query BO flags Boris Brezillon
2025-10-15 16:03 ` [PATCH v4 13/14] drm/panfrost: Add flag to map GEM object Write-Back Cacheable Boris Brezillon
2025-10-15 16:06 ` Steven Price
2025-10-15 16:03 ` [PATCH v4 14/14] drm/panfrost: Bump the driver version to 1.6 Boris Brezillon
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=20251016150704.405524b9@fedora \
--to=boris.brezillon@collabora.com \
--cc=airlied@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=faith.ekstrand@collabora.com \
--cc=kernel@collabora.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--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.