diff mbox series

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

Message ID 20231201233438.1709981-1-Felix.Kuehling@amd.com (mailing list archive)
State New, archived
Headers show
Series [1/6] Revert "drm/prime: Unexport helpers for fd/handle conversion" | expand

Commit Message

Felix Kuehling Dec. 1, 2023, 11:34 p.m. UTC
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@amd.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
 drivers/gpu/drm/drm_prime.c | 33 ++++++++++++++++++---------------
 include/drm/drm_prime.h     |  7 +++++++
 2 files changed, 25 insertions(+), 15 deletions(-)

Comments

Felix Kuehling Dec. 1, 2023, 11:40 p.m. UTC | #1
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.

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@amd.com>
> Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Felix Kuehling <Felix.Kuehling@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);
Alex Deucher Dec. 4, 2023, 5:49 p.m. UTC | #2
[AMD Official Use Only - General]

> -----Original Message-----
> From: Kuehling, Felix <Felix.Kuehling@amd.com>
> Sent: Friday, December 1, 2023 6:40 PM
> To: amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Deucher,
> Alexander <Alexander.Deucher@amd.com>
> Cc: Daniel Vetter <daniel@ffwll.ch>; Koenig, Christian
> <Christian.Koenig@amd.com>; Thomas Zimmermann
> <tzimmermann@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@amd.com>
> > Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
> > Acked-by: Daniel Vetter <daniel@ffwll.ch>
> > Signed-off-by: Felix Kuehling <Felix.Kuehling@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);
Felix Kuehling Dec. 4, 2023, 10:01 p.m. UTC | #3
On 2023-12-04 12:49, Deucher, Alexander wrote:
> [AMD Official Use Only - General]
>
>> -----Original Message-----
>> From: Kuehling, Felix <Felix.Kuehling@amd.com>
>> Sent: Friday, December 1, 2023 6:40 PM
>> To: amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Deucher,
>> Alexander <Alexander.Deucher@amd.com>
>> Cc: Daniel Vetter <daniel@ffwll.ch>; Koenig, Christian
>> <Christian.Koenig@amd.com>; Thomas Zimmermann
>> <tzimmermann@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

Thank you, all! I also saw Sasha Levin is backporting it to 6.6.

Cheers,
   Felix


>
> 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@amd.com>
>>> Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
>>> Acked-by: Daniel Vetter <daniel@ffwll.ch>
>>> Signed-off-by: Felix Kuehling <Felix.Kuehling@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);
diff mbox series

Patch

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);