[PATCH 1/6] Revert "drm/prime: Unexport helpers for fd/handle conversion"

Deucher, Alexander Alexander.Deucher at amd.com
Mon Dec 4 17:49:07 UTC 2023


[AMD Official Use Only - General]

> -----Original Message-----
> From: Kuehling, Felix <Felix.Kuehling at amd.com>
> Sent: Friday, December 1, 2023 6:40 PM
> To: amd-gfx at lists.freedesktop.org; dri-devel at lists.freedesktop.org; Deucher,
> Alexander <Alexander.Deucher at amd.com>
> Cc: Daniel Vetter <daniel at ffwll.ch>; Koenig, Christian
> <Christian.Koenig at amd.com>; Thomas Zimmermann
> <tzimmermann at suse.de>
> Subject: Re: [PATCH 1/6] Revert "drm/prime: Unexport helpers for fd/handle
> conversion"
>
> Hi Alex,
>
> I'm about to push patches 1-3 to the rebased amd-staging-drm-next. It would
> be good to get patch 1 into drm-fixes so that Linux 6.6 will be the only kernel
> without these prime helpers. That would minimize the hassle for DKMS driver
> installations on future distros.

Already done:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0514f63cfff38a0dcb7ba9c5f245827edc0c5107

Alex

>
> Thanks,
>    Felix
>
>
> On 2023-12-01 18:34, Felix Kuehling wrote:
> > This reverts commit 71a7974ac7019afeec105a54447ae1dc7216cbb3.
> >
> > These helper functions are needed for KFD to export and import DMABufs
> > the right way without duplicating the tracking of DMABufs associated
> > with GEM objects while ensuring that move notifier callbacks are
> > working as intended.
> >
> > Acked-by: Christian König <christian.koenig at amd.com>
> > Acked-by: Thomas Zimmermann <tzimmermann at suse.de>
> > Acked-by: Daniel Vetter <daniel at ffwll.ch>
> > Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> > ---
> >   drivers/gpu/drm/drm_prime.c | 33 ++++++++++++++++++---------------
> >   include/drm/drm_prime.h     |  7 +++++++
> >   2 files changed, 25 insertions(+), 15 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
> > index 63b709a67471..834a5e28abbe 100644
> > --- a/drivers/gpu/drm/drm_prime.c
> > +++ b/drivers/gpu/drm/drm_prime.c
> > @@ -278,7 +278,7 @@ void drm_gem_dmabuf_release(struct dma_buf
> *dma_buf)
> >   }
> >   EXPORT_SYMBOL(drm_gem_dmabuf_release);
> >
> > -/*
> > +/**
> >    * drm_gem_prime_fd_to_handle - PRIME import function for GEM drivers
> >    * @dev: drm_device to import into
> >    * @file_priv: drm file-private structure @@ -292,9 +292,9 @@
> > EXPORT_SYMBOL(drm_gem_dmabuf_release);
> >    *
> >    * Returns 0 on success or a negative error code on failure.
> >    */
> > -static int drm_gem_prime_fd_to_handle(struct drm_device *dev,
> > -                                 struct drm_file *file_priv, int prime_fd,
> > -                                 uint32_t *handle)
> > +int drm_gem_prime_fd_to_handle(struct drm_device *dev,
> > +                          struct drm_file *file_priv, int prime_fd,
> > +                          uint32_t *handle)
> >   {
> >     struct dma_buf *dma_buf;
> >     struct drm_gem_object *obj;
> > @@ -360,6 +360,7 @@ static int drm_gem_prime_fd_to_handle(struct
> drm_device *dev,
> >     dma_buf_put(dma_buf);
> >     return ret;
> >   }
> > +EXPORT_SYMBOL(drm_gem_prime_fd_to_handle);
> >
> >   int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
> >                              struct drm_file *file_priv)
> > @@ -408,7 +409,7 @@ static struct dma_buf
> *export_and_register_object(struct drm_device *dev,
> >     return dmabuf;
> >   }
> >
> > -/*
> > +/**
> >    * drm_gem_prime_handle_to_fd - PRIME export function for GEM drivers
> >    * @dev: dev to export the buffer from
> >    * @file_priv: drm file-private structure @@ -421,10 +422,10 @@
> > static struct dma_buf *export_and_register_object(struct drm_device *dev,
> >    * The actual exporting from GEM object to a dma-buf is done through the
> >    * &drm_gem_object_funcs.export callback.
> >    */
> > -static int drm_gem_prime_handle_to_fd(struct drm_device *dev,
> > -                                 struct drm_file *file_priv, uint32_t handle,
> > -                                 uint32_t flags,
> > -                                 int *prime_fd)
> > +int drm_gem_prime_handle_to_fd(struct drm_device *dev,
> > +                          struct drm_file *file_priv, uint32_t handle,
> > +                          uint32_t flags,
> > +                          int *prime_fd)
> >   {
> >     struct drm_gem_object *obj;
> >     int ret = 0;
> > @@ -506,6 +507,7 @@ static int drm_gem_prime_handle_to_fd(struct
> > drm_device *dev,
> >
> >     return ret;
> >   }
> > +EXPORT_SYMBOL(drm_gem_prime_handle_to_fd);
> >
> >   int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
> >                              struct drm_file *file_priv)
> > @@ -864,9 +866,9 @@
> EXPORT_SYMBOL(drm_prime_get_contiguous_size);
> >    * @obj: GEM object to export
> >    * @flags: flags like DRM_CLOEXEC and DRM_RDWR
> >    *
> > - * This is the implementation of the &drm_gem_object_funcs.export
> > functions
> > - * for GEM drivers using the PRIME helpers. It is used as the default
> > for
> > - * drivers that do not set their own.
> > + * This is the implementation of the &drm_gem_object_funcs.export
> > + functions for GEM drivers
> > + * using the PRIME helpers. It is used as the default in
> > + * drm_gem_prime_handle_to_fd().
> >    */
> >   struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
> >                                  int flags)
> > @@ -962,9 +964,10 @@ EXPORT_SYMBOL(drm_gem_prime_import_dev);
> >    * @dev: drm_device to import into
> >    * @dma_buf: dma-buf object to import
> >    *
> > - * This is the implementation of the gem_prime_import functions for
> > GEM
> > - * drivers using the PRIME helpers. It is the default for drivers
> > that do
> > - * not set their own &drm_driver.gem_prime_import.
> > + * This is the implementation of the gem_prime_import functions for
> > + GEM drivers
> > + * using the PRIME helpers. Drivers can use this as their
> > + * &drm_driver.gem_prime_import implementation. It is used as the
> > + default
> > + * implementation in drm_gem_prime_fd_to_handle().
> >    *
> >    * Drivers must arrange to call drm_prime_gem_destroy() from their
> >    * &drm_gem_object_funcs.free hook when using this function.
> > diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h index
> > a7abf9f3e697..2a1d01e5b56b 100644
> > --- a/include/drm/drm_prime.h
> > +++ b/include/drm/drm_prime.h
> > @@ -60,12 +60,19 @@ enum dma_data_direction;
> >
> >   struct drm_device;
> >   struct drm_gem_object;
> > +struct drm_file;
> >
> >   /* core prime functions */
> >   struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
> >                                   struct dma_buf_export_info *exp_info);
> >   void drm_gem_dmabuf_release(struct dma_buf *dma_buf);
> >
> > +int drm_gem_prime_fd_to_handle(struct drm_device *dev,
> > +                          struct drm_file *file_priv, int prime_fd, uint32_t
> > +*handle); int drm_gem_prime_handle_to_fd(struct drm_device *dev,
> > +                          struct drm_file *file_priv, uint32_t handle,
> uint32_t flags,
> > +                          int *prime_fd);
> > +
> >   /* helper functions for exporting */
> >   int drm_gem_map_attach(struct dma_buf *dma_buf,
> >                    struct dma_buf_attachment *attach);


More information about the dri-devel mailing list