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

Felix Kuehling felix.kuehling at amd.com
Tue Nov 28 20:15:29 UTC 2023


On 2023-11-28 12:22, Alex Deucher wrote:
> On Thu, Nov 23, 2023 at 6:12 PM Felix Kuehling <felix.kuehling at amd.com> wrote:
>> [+Alex]
>>
>> On 2023-11-17 16:44, 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.
>>>
>>> CC: Christian König <christian.koenig at amd.com>
>>> CC: Thomas Zimmermann <tzimmermann at suse.de>
>>> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
>> Re: our discussion about v2 of this patch: If this version is
>> acceptable, can I get an R-b or A-b?
>>
>> I would like to get this patch into drm-next as a prerequisite for
>> patches 2 and 3. I cannot submit it to the current amd-staging-drm-next
>> because the patch I'm reverting doesn't exist there yet.
>>
>> Patch 2 and 3 could go into drm-next as well, or go through Alex's
>> amd-staging-drm-next branch once patch 1 is in drm-next. Alex, how do
>> you prefer to coordinate this?
> I guess ideally this would go through my drm-next tree since your
> other patches depend on it unless others feel strongly that it should
> go through drm-misc.

Yes, drm-next would work best for applying this patch and the two 
patches that depend on it. I can send you the rebased patches from my 
drm-next based branch that I used for testing this.

Regards,
   Felix


>
> Alex
>
>
>> Regards,
>>     Felix
>>
>>
>>> ---
>>>    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 amd-gfx mailing list