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