[PATCH 1/6] Revert "drm/prime: Unexport helpers for fd/handle conversion"
Felix Kuehling
felix.kuehling at amd.com
Mon Dec 4 22:01:55 UTC 2023
On 2023-12-04 12:49, Deucher, Alexander wrote:
> [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
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 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 amd-gfx
mailing list